检查时间是否属于间隔

时间:2013-12-04 22:54:37

标签: php time

我的活动有开始时间和持续时间(例如,开始时间为22:00,持续时间为3小时)。我可以计算事件结束时间,对于当前示例,它将是01:00

所以,最后我有:

  • 开始时间:22:00
  • 持续时间:3小时
  • 结束时间:01:00
  • 指向x(我应该知道它是否属于指定的时间间隔),例如2013-11-05 23:00:00(我这里只有日期部分)

我需要检测事件是否会在特定时间内发生(如果点x属于此事件时间间隔)。事件可能持续时间> 24小时。我不知道有关事件的任何日期(这些是经常性事件)

如何才能在php中完成?

3 个答案:

答案 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,如果开始日期是当天,则不会获得匹配。