找出时间段是否与当前时间匹配

时间:2011-04-22 19:57:15

标签: php datetime date time

我有这样的约会:

 // just a example date
 $time_in_the_future_start = date('H:i', time()+60*60*24*7);
 $time_in_the_future_end = date('H:i', time()+60*60*24*7+480);

 $now = date('H:i', time());

如何判断当前时间是否在$time_in_the_future之内?

例如,如果

$time_in_the_future_start = 21:30;
$time_in_the_future_end = 0:30;

$now = 22:07

这将是一场比赛。

修改 澄清一下,$time_in_the_future是一个反复发生的事件,具有过去或未来的日期。我只需要小时+分钟来匹配,而不是剩下的日期...基本上我只是想比较一天中的时间

4 个答案:

答案 0 :(得分:5)

函数inTimeRange()

我想,这将完全适用于你的情况。

  function inTimeRange($time_start, $time_end, $time_needle) {
    $res = false;
    $t1 = strtotime("1970-01-01 {$time_start}:00");
    $t2 = strtotime("1970-01-01 {$time_end}:00");
    $tn = strtotime("1970-01-01 {$time_needle}:00");
    if ($t1 >= $t2) $t2 = strtotime('+1 day', $t2);
    return ($tn >= $t1) && ($tn <= $t2); // or return ($tn > $t1) && ($tn < $t2);
    }

  var_dump(inTimeRange('21:30', '00:30', '22:07'));

输出

  

注意:所有参数的格式必须为HH:MM。您可以传递date("H:i", ...)来获取此功能的参数。

答案 1 :(得分:3)

您可以使用time()部分以秒为单位检索数值,以满足以编程方式使用。

$time_in_the_future_start = time()+60*60*24*7;
$time_in_the_future_end = time()+60*60*24*7+480;

$now = time();

if($now >= $time_in_the_future_start && $time < $time_in_the_future_end) {
    // between times
}

然后要使用hh:mm格式打印值,一旦完成检查,您仍然可以使用date('H:i')

答案 2 :(得分:3)

这是一个比较当天时间的例子。请注意,这不会比较日期,就像您要求的那样。

这会将时间转换为当天的小时数,以便我们可以将其作为一个数字进行比较。

$time_in_the_future_start = time()+60*60*24*7;
$time_in_the_future_start = date('H', $time_in_the_future_start) + (date('i', $time_in_the_future_start) / 60);
$time_in_the_future_start = time()+60*60*24*7+480;
$time_in_the_future_start = date('H', $time_in_the_future_start) + (date('i', $time_in_the_future_start) / 60);

$now = time();
$now = date('H', $now) + (date('i', $now) / 60);

if($now > $time_in_future_start && $now < $time_in_future_end){
  //withing time span
}else{
  //Not within time span
}

答案 3 :(得分:2)

如果您有日期,请在两次使用strtotime()以获取每个日期的unix时间戳。然后检查你想要获得的时间的unix时间戳是否大于_start时间并且小于_end时间。

如果它们都已经是时间戳形式,那就更容易了。由于您似乎从time()开始,请执行类似

的操作
$start = time();

$time_in_the_future_start = $start + 60*60*24*7; 
$time_in_the_future_end = $start + 60*60*24*7+480;

$time_in_the_future_start_display = date('H:i', $start+60*60*24*7);
$time_in_the_future_end_display = date('H:i', $start+60*60*24*7+480);

然后就这样做

$curtime = time();

if($curtime < $time_in_the_future_end && $curtime > $time_in_the_future_start)
    // Code here