Проверьте, если текущее время между двумя разами, с возможностью притирки дней
У меня есть система, которая принимает пользовательские представления, и после получения представления система просматривает все временные интервалы, чтобы найти соответствующий временной интервал. Проблема заключается в том, что он должен иметь возможность проверять время начала и окончания, если время окончания приближается к следующему дню.
Возьмем следующий пример: временной интервал начинается в 22:30 текущего дня и заканчивается в 16:00 следующего дня. Если текущее время между 22:30 и 23:59:59, отправка будет назначена этому временному интервалу. Однако, если текущее время между 12:00 и 16:00, то оно пропустит временной интервал.
Это то, что я до сих пор:
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";
}
}
Если текущее время 23:00:00, то результат будет
false
true
Но если текущее время 12:00:00, то результат будет
false
false
хотя технически это между двумя временами.
Я знаю, что это связано с тем, что если это новый день, тоstrtotime
результат для$from
будет позже в тот же день. Таким образом, вместо проверки на 10:30 вечера вчера, он проверяет на 10:30 вечера сегодня вечером.
Моя проблема в том, что я не могу придумать способ сделать$from
переключение времени на предыдущий день, если это необходимо, аналогично тому, как я форсирую$to
время на следующий день.