我有一个接受用户提交的系统,在收到提交后,系统将遍历所有时间段以找到合适的时间段。问题是,如果结束时间跨到第二天,它需要能够检查开始和结束时间。
举个例子:时间段从当天晚上 10:30 开始,到第二天下午 4:00 结束。如果当前时间在晚上 10:30 到晚上 11:59:59 之间,则提交将被分配到该时间段。但是,如果当前时间在上午 12:00 到下午 4: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
时间强制到第二天的方式。