我有这样的约会:
// 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
是一个反复发生的事件,具有过去或未来的日期。我只需要小时+分钟来匹配,而不是剩下的日期...基本上我只是想比较一天中的时间
答案 0 :(得分:5)
我想,这将完全适用于你的情况。
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