我的活动有开始时间和持续时间(例如,开始时间为22:00
,持续时间为3小时)。我可以计算事件结束时间,对于当前示例,它将是01:00
。
所以,最后我有:
22:00
01:00
x
(我应该知道它是否属于指定的时间间隔),例如2013-11-05 23:00:00
(我这里只有日期部分)我需要检测事件是否会在特定时间内发生(如果点x
属于此事件时间间隔)。事件可能持续时间> 24小时。我不知道有关事件的任何日期(这些是经常性事件)
如何才能在php中完成?
答案 0 :(得分:1)
也许strtotime可以完成工作:
$ts = strtotime('2013-11-05 23:00:00');
$date = date('Y-m-d', $ts);
if ($ts >= strtotime($date . ' 22:00') && $ts <= strtotime($date . ' 22:00 + 3hours')) {
echo "match";
}
答案 1 :(得分:1)
您正在寻找的功能是strtotime()
,值得注意的是它不是 magic 。您必须确定您提供的日期字符串符合Supported Date and Time Formats。
$start = strtotime("2013-11-05 22:00:00");
$duration = 3 * 3600;
$end = $start + duration;
$x = strtotime("2013-11-05 23:00:00");
if( ($x <= $end) && ($x >= $start) ) {
echo "x is in time period.";
} else { echo "nope."; }
此外,时间戳以UTC格式返回,根据PHP中设置的时区计算,默认为服务器上设置的时区。请注意这一点。
正如在@ mcuadros的回答中所看到的那样,您也可以向strtotime()
relative time specifications 提供today 22:00 +3 hours
,其效果与tomorrow 01:00
相同。
答案 2 :(得分:1)
如果开始时间小于或等于x
的时间,则假设开始日期是x
的日期。否则假设开始日期是x
日期前一天。
对于示例,前者是这种情况,因此开始日期和时间将为2013-11-05 22:00:00
。有了这个,请检查匹配。
如果开始时间是例如23:30
,比开始日期为前一天2013-11-04 23:30:00
。这是必需的,因为如果x
的时间是例如01:00
,如果开始日期是当天,则不会获得匹配。