计算pm到am之间的时间差,并检查它是否在当前时间范围内

时间:2015-03-02 12:00:23

标签: php

您好我想检查当前时间是否在两个时间范围之间并计算它们之间的差异,到目前为止我有这个但它不起作用

$current_time = "11:14 pm";
$start_time = "11:00 pm";
$end_time = "07:55 am";
$date1 = DateTime::createFromFormat('H:i a', $current_time);
$date2 = DateTime::createFromFormat('H:i a', $start_time);
$date3 = DateTime::createFromFormat('H:i a', $end_time);
if ($date1 > $date2 && $date1 < $date3) {
   echo 'in range';
} else {
    echo 'not in range';
}

但是它说&#34;不在范围内&#34;!

2 个答案:

答案 0 :(得分:2)

您的原始代码的主要问题是您正在创建3次日期并产生意外结果。

范围的开始是“11:00p”,它假设今天意味着11p。

范围的结尾是“7:00a”,假设也是今天。你实际上打算说“明天7点00分”。


您可以尝试使用strtotime

$currentTime = strtotime("11:14 pm");
$rangeStart = strtotime("11:00 pm");
$rangeEnd = strtotime("tomorrow 07:55 am");

if ($currentTime >= $rangeStart && $currentTime <= $rangeEnd) {
   echo 'in range';
} else {
    echo 'not in range';
}

或者您可以包含实际日期并执行以下操作:

$currentTime = DateTime::createFromFormat("Y-m-d H:i:s", "2015-01-01 23:14:00");
$rangeStart = DateTime::createFromFormat("Y-m-d H:i:s", "2015-01-01 23:00:00");
$rangeEnd = DateTime::createFromFormat("Y-m-d H:i:s", "2015-01-02 07:55:00");

if ($currentTime >= $rangeStart && $currentTime <= $rangeEnd) {
   echo 'in range';
} else {
    echo 'not in range';
}

答案 1 :(得分:1)

当开始结束时,你需要处理一天的变化。

$current_time = "11:14 pm"; 
$start_time = "11:00 pm"; 
$end_time = "07:55 am"; 
$date1 = DateTime::createFromFormat('H:i a', $current_time)->getTimestamp(); 
$date2 = DateTime::createFromFormat('H:i a', $start_time)->getTimestamp();; 
$date3 = DateTime::createFromFormat('H:i a', $end_time)->getTimestamp(); 
if ($date3 < $date2) { 
    $date3 += 24 * 3600; 
    if ($date1 < $date2) { 
        $date1 += 24 *3600; 
    } 

} 
if ($date1 > $date2 && $date1 < $date3) { 
   echo 'in range'; 
} else { 
    echo 'not in range'; 
}