我想每天在两个用户指定的时间之间进行检查,而不是运行一些函数调用(即"请勿打扰")。
例如,用户设置"请勿打扰"时间段在晚上10点到早上6点(第二天)之间。
仅供参考,最终用户不会指定日期/日期。这将每周7天,每天持续运行。
所以在晚上10点到6点(第二天)之间,任何函数调用都会被忽略。这是我到目前为止所写的内容:
$now = time(); // or $now = strtotime('11:00pm'); to simulate time to test
$start = strtotime('10:00pm');
$end = strtotime('6:00am +1 day');
// alternative time block
//$start = strtotime('10:00am');
//$end = strtotime('11:00am');
//debug
//echo date('r', $now) . '<br>' . date('r', $start) . '<br>' . date('r', $end) . '<br><br>';
if($start > $now || $now > $end) {
echo 'disturb';
} else {
echo 'do not disturb';
}
但这似乎不起作用,因为一旦你到了午夜,它就是新的一天,但$end
变量已经是前一天。
我尝试将它放在后面一天,但问题是$end
的值最终低于$start
的值,这是不正确的。
每当时间到达午夜时,我也尝试在$now
变量中添加一天,但问题是,如果$start
和$end
时间相同,那该怎么办?一天?
我在这里缺少什么?
答案 0 :(得分:5)
显然,您正在尝试在此处构建某种日历功能。
如果您使用strtotime('10:00pm');
,则会更改为午夜后第二天的时间戳。
所以你需要给变量一个日期
$start = strtotime('2015-02-26 10:00pm');
$end = strtotime('2015-02-27 6:00am');
不确定如何存储这些时间块,但理想情况下它们将存储在数据库表中。
如果它每天都一样,你可以这样做:
$now = time(); // or $now = strtotime('11:00pm'); to simulate time to test
$start = strtotime('10:00pm');
$end = strtotime('6:00am'); // without the +1 day
if($start > $end) {
if($start > $now && $now > $end) {
echo 'disturb';
} else {
echo 'do not disturb';
}
}else{
if($now < $start || $now > $end) {
echo 'disturb';
} else {
echo 'do not disturb';
}
}
答案 1 :(得分:1)
我会改为转换为DateTime()个对象。然后,在结束的日子里,你不会遇到任何问题。
// obviously you'll need to feed in the date as well so
// that might involve some refactoring
$now = new DateTime();
$start = new DateTime('2015-02-26 10:00');
$end = new DateTime('2015-02-27 06:00');
现在你可以像以前一样比较。
如果您不知道日期并且您的用户仅指定时间,则可能需要动态添加日期。这些仅仅是例如。
编辑:为了应对未知的日子,你可以在今天抓住后动态生成:
$today = new DateTime();
$start = new DateTime($today->format('Y-m-d') . ' 10:00');
$end = new DateTime($today->format('Y-m-d') . ' 06:00');
$end->add(new DateInterval('P1D'));
答案 2 :(得分:1)
实际上这是一个很好的问题,
您可以使用相对较新的面向对象的方式处理时间。
我会给你链接一些信息,因为我没有时间写一个完整的例子 http://php.net/manual/en/datetime.diff.php http://php.net/manual/en/class.datetime.php http://php.net/manual/en/class.dateinterval.php
具体来自文档:
<?php
$datetime1 = new DateTime('2009-10-11');
$datetime2 = new DateTime('2009-10-13');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%R%a days');
?>
希望有所帮助