微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在PHP中模拟“请勿打扰”功能

我想每天在两个用户指定的时间之间进行检查,而不是运行一些函数调用(即“请勿打扰”).

例如,用户在晚上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时间是在同一天内怎么办?

在这里错过了什么?

解决方法

显然你正在尝试在这里构建某种日历功能.

如果你使用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';
   }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐