Mam system, który akceptuje przesyłanie przez użytkownika, a po otrzymaniu zgłoszenia system przejdzie przez wszystkie szczeliny czasowe, aby znaleźć odpowiednią szczelinę czasową. Problem polega na tym, że musi być w stanie sprawdzić przed czasem zakończenia &, jeśli czas zakończenia upływa do następnego dnia.Sprawdź, czy aktualny czas jest między dwoma czasami, z możliwością docierania dni
Weź następujący przykład: Godzina rozpoczęcia zaczyna się o 22:30 w bieżącym dniu, a kończy o godzinie 16:00 następnego dnia. Jeśli bieżący czas przypada między 22:30 a 23:59:59, zgłoszenie zostanie przypisane do tej szczeliny czasowej. Jeśli jednak bieżący czas przypada między godziną 12:00 a 16:00, pominie to okienko czasowe.
To, co mam tak daleko:
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";
}
}
Jeśli bieżąca godzina 23:00:00, to wynik byłby
false
true
Ale jeśli obecny czas jest 12: 00:00 następnie wynik byłby następujący:
false
false
mimo że technicznie występuje między tymi dwoma czasami.
Wiem, że ma to związek z tym, że jeśli jest to nowy dzień, to wynik strtotime
dla $from
będzie późniejszy w tym dniu. Więc zamiast sprawdzać wczoraj o 22:30, sprawdza się dziś wieczorem o 22:30.
Moim problemem jest to, że nie mogę wymyślić sposobu, aby zmienić czas na $from
na dzień wcześniej, podobnie jak wymuszam czas $to
na następny dzień.
Jeśli daty są ważne, to dlaczego nie dodać go do swoich czasów? –
Godziny są dynamiczne. Czasy są przechowywane w bazie danych i mogą być zmienione według uznania administratora. Używamy go do dzielenia zgłoszeń, aby osoby dokonujące przeglądu zgłoszeń miały równe obciążenie pracą. –