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


Compare h:i:s to see which hour is greater including midnight - 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
}

建议?

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

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

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

上面@mopo922提供的答案是最万无一失、最正确的答案。

另一种方法是在$startTime> $closeTime的情况下将 24 小时"添加到"$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';
}
?>