比较h:i:s看看哪个小时更大,包括午夜 - PHP

时间:2015-01-15 05:39:29

标签: php

好的,我有一个功能,可以比较00:00:00 - 24:00:00的小时数来判断结束时间。现在我遇到的问题是,假设商店在早上8点开门,午夜关闭,好00:00:00将小于23:00:00。我如何确保它能够识别午夜更大?

这是我正在做的事情:

if((strtotime($openTime) < time()) && (strtotime($closeTime) > time()))
{
    $response['data_retrieved']['store'][$i]['store_settings']['open'] = 1;// open
}
else
{
    $response['data_retrieved']['store'][$i]['store_settings']['open'] = 0; //close
}

建议?

3 个答案:

答案 0 :(得分:1)

由于没有24:00:00,您需要完整日期字符串Y-m-d H:i:s才能进行准确比较。

即使仅添加日期也不够,因为在查看该月的最后一天('31 08:00:00' < '1 00:00:00')时它会中断。

答案 1 :(得分:1)

PHP有非常好的DateTime支持。最好使用它而不是重新发明的东西。也像@ mopo922建议的那样,你需要完整的Y-m-d H:i:s

答案 2 :(得分:0)

上面提供的答案@ mopo922是最简单,最正确的答案。

另一种方法是在$ startTime“加上”24小时,如果$ startTime&gt; $ closeTime。这很狡猾但仍能解决问题。

<?php
date_default_timezone_set('Australia/Sydney');

$openTime = strtotime('08:00');
$currentTime = strtotime('23:00');
$closeTime = strtotime('10:00');

echo 'open: ' .$openTime . '<br>' .
     'time(): ' . $currentTime . '<br>' .
     'close: ' . $closeTime . '<br>';

// 1 day = 86400 seconds
if ($closeTime < $openTime) {
    $closeTime += 86400;
}

if($openTime < $currentTime && $closeTime > $currentTime)
{
    echo 'open';
} 
else 
{
    echo 'closed';
}
?>