Ho un sistema che accetta l'invio degli utenti, e dopo aver ricevuto una richiesta il sistema passerà attraverso tutte le finestre temporali per trovare il periodo temporale appropriato. Il problema è che deve essere in grado di controllare gli orari di inizio & se l'ora di fine termina il giorno successivo.Verifica se l'ora corrente è compresa tra due volte, con la possibilità di giorni di lappatura
Prendere l'esempio seguente: Una finestra temporale inizia alle 22:30 del giorno corrente e termina alle 16:00 del giorno successivo. Se l'ora corrente è tra le 22:30 e le 23:59:59 PM, l'invio verrà assegnato a quel periodo di applicazione. Tuttavia, se l'ora corrente è tra le 12:00 AM e le 4:00 PM, salterà il periodo di applicazione.
Questo è quello che ho finora:
function check_time($from, $to, $time) {
$time = strtotime($time);
$from = strtotime($from);
$to_ = strtotime($to);
$to = $to_ <= $from ? strtotime($to . " tomorrow") : $to_;
return ($time >= $from && $time <= $to);
}
$timeslots = array(
array("16:00:00", "22:30:00"),
array("22:30:00", "16:00:00")
);
foreach ($timeslots as $slot) {
if (check_time($slot[0], $slot[1], date("H:i:s")))
{
echo "true\n";
}
else
{
echo "false\n";
}
}
Se l'ora corrente è 23:00:00, allora il risultato sarebbe
false
true
Ma se l'ora corrente è 12: 00:00 quindi il risultato sarebbe
false
false
anche se tecnicamente è tra le due volte.
So che ha a che fare con il fatto che se si tratta di un nuovo giorno, quindi il risultato per $from
sarà più tardi nel corso della giornata. Quindi, invece di controllare per le 22.30 di ieri, controlla per le 22:30 di stasera.
mio problema è che io non riesco a venire con un modo per effettuare il passaggio $from
volta al giorno precedente se ha bisogno di, simile a come forzo il tempo $to
nel giorno successivo.
Se sono importanti date, allora perché non aggiungerlo ai tuoi tempi? –
I tempi sono dinamici. I timeslot sono memorizzati in un database e possono essere modificati a discrezione di un amministratore. Lo usiamo per suddividere gli invii in modo che le persone che esaminano gli invii abbiano un carico di lavoro uguale. –