Проверьте, если текущее время между двумя разами, с возможностью притирки дней

У меня есть система, которая принимает пользовательские представления, и после получения представления система просматривает все временные интервалы, чтобы найти соответствующий временной интервал. Проблема заключается в том, что он должен иметь возможность проверять время начала и окончания, если время окончания приближается к следующему дню.

Возьмем следующий пример: временной интервал начинается в 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 время на следующий день.

Ответы на вопрос(2)

Ваш ответ на вопрос