I need to calculate the hours that are between two hours:
for example I have a schedule from 18:00 to 02:00; I need to know how many of those hours are within 22:00 to 06:00.
for this case it would be 4 hours;
how can I do that in PHP?
- I don't need to know the time difference from 22 to 06
what I need to know is the difference in hours from 22 to 02. since this time frame is the one within the specified parameters
- I clarify that I also need to know the minutes
this is the code i have, but it seems very complex and it doesn't always work
$he = new datetime('2020-01-01 '.$horaInicio);
$hs = new datetime($dateFinal.' '.$horaFinal);
$inicio_noche = new datetime($he->format('y-m-d').' 22:00:00');
$fin_noche = new datetime($hs->format('y-m-d').' 06:00:00');
$medianoche = new datetime($hs->format('y-m-d').' 00:00:00');
if ($he->format('d') == $hs->format('d')) {
if ($he->format('H:i:s') >= $medianoche->format('H:i:s') && $hs->format('H:i:s') <= $fin_noche->format('H:i:s')) {
$diff = $he->diff($hs);
$horas['nocturnas'] = new datetime('2020-01-01 '.$diff->format('%H:%i:%s'));
}
if ($he->format('H:i:s') < $fin_noche->format('H:i:s') && $hs->format('H:i:s') > $fin_noche->format('H:i:s')) {
$diff = $he->diff($fin_noche);
$horas['nocturnas'] = new datetime('2020-01-01 '.$diff->format('%H:%i:%s'));
}
if ($he->format('H:i:s') > $fin_noche->format('H:i:s') && $hs->format('H:i:s') > $fin_noche->format('H:i:s')) {
$diff = $he->diff($fin_noche);
$horas['nocturnas'] = new datetime('2020-01-01 '.$diff->format('%H:%i:%s'));
}
} else {
if ($he->format('H:i:s') >= $inicio_noche->format('H:i:s') && $hs->format('H:i:s') <= $fin_noche->format('H:i:s')) {
$diff = $he->diff($hs);
$horas['nocturnas'] = new datetime('2020-01-01 '.$diff->format('%H:%i:%s'));
}
if ($he->format('H:i:s') < $inicio_noche->format('H:i:s') && $hs->format('H:i:s') <= $fin_noche->format('H:i:s')) {
$diff = $inicio_noche->diff($hs);
$horas['nocturnas'] = new datetime('2020-01-01 '.$diff->format('%H:%i:%s'));
}
if ($he->format('H:i:s') < $inicio_noche->format('H:i:s') && $hs->format('H:i:s') > $fin_noche->format('H:i:s')) {
$diff = $inicio_noche->diff($fin_noche);
$horas['nocturnas'] = new datetime('2020-01-01 '.$diff->format('%H:%i:%s'));
}
}