【发布时间】:2013-06-13 04:11:31
【问题描述】:
我有一个接受用户提交的系统,在收到提交后,系统将遍历所有时间段以找到合适的时间段。问题是,如果结束时间跨到第二天,它需要能够检查开始和结束时间。
举个例子: 时间段从当天晚上 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
即使技术上介于两者之间。
我知道这与以下事实有关:如果是新的一天,那么 $from 的 strtotime 结果将在当天晚些时候出现。因此,它不是检查昨天晚上 10:30,而是检查今晚晚上 10:30。
我的问题是,如果需要,我似乎无法将$from 时间切换到前一天,就像我将$to 时间强制切换到第二天一样。
【问题讨论】:
-
如果日期很重要,那为什么不把它加到你的时间里呢?
-
时代是动态的。时隙存储在数据库中,管理员可以自行更改。我们使用它来拆分提交内容,以便审核提交内容的人有相同的工作量。
标签: php time compare strtotime