mi sono permesso di riscrivere la funzione iniziale, partendo dall'idea che è forse più semplice confrontare dei numeri interi fra loro, quindi "normalizziamo" gli orari in minuti e confrontiamoli.
questo il mio esempio, provato in locale da me funziona, spero anche da voi
codice:
function controllo_orario ($starttime, $stoptime, $checktime)
{ ### diamo per buono che tutti gli orari rispettino il formato 0:00
# altrimenti controllare prima del submit in javascript please
$tmp = explode (':', $starttime);
# converto l'orario di inizio in minuti
$Start = intval ($tmp [0]) * 60 + intval ($tmp [1]);
# print 'Start = '.$Start.'
'; # debug
unset ($tmp);
$tmp = explode (':', $stoptime);
# converto l'orario di fine in minuti
$Stop = intval ($tmp [0]) * 60 + intval ($tmp [1]);
unset ($tmp);
# se fine < inizio, c'è la mezzanotte, aggiungo quindi 24 ore
if ($Stop < $Start) { $Stop += 60 * 24; }
# print 'Stop = '.$Stop.'
'; # debug
$tmp = explode (':', $checktime);
# converto l'orario da verificare in minuti
$toCheck = intval ($tmp [0]) * 60 + intval ($tmp [1]);
# se l'orario da verificare è < inizio, c'è la mezzanotte
# aggiungo quindi 24 ore anche qui, speriamo
if ($toCheck < $Start) { $toCheck += 60 * 24; }
# print 'toCheck = '.$toCheck.'
'; # debug
if ($Start <= $toCheck)
{ if ($Stop >= $toCheck) { $esito = true; }
else { $esito = false; }
} else { $esito = false; }
return $esito;
}
if ($_POST ['verifica'] == 'verifica')
{ $esito = controllo_orario ($_POST ['starttime'], $_POST ['stoptime'], $_POST ['checktime']);
print 'Orario: '.$_POST ['checktime'].' ';
if ($esito == false) { print 'NON '; }
print 'compreso fra le '.$_POST ['starttime'].' e le '.$_POST ['stoptime']; }
?>
<form action="" method="post">
Start: <input type="text" name="starttime" value="09:00" />
Stop: <input type="text" name="stoptime" value="19:00" />
To be checked: <input type="text" name="checktime" value="<?= date ("H:i"); ?>" />
<input type="hidden" name="verifica" value="verifica" />
<input type="submit" value="Verifica" />
</form>