在午夜过后几小时显示打开和关闭通知?

时间:2016-03-31 17:54:42

标签: php date time

我有这个代码,我在另一个网站上用来显示商店的开放和关闭状态。我将它用于另一家营业时间或午夜营业的商店。因此,代码认为商店已关闭,因为它在关闭时间之后注册时间,因为它是'00'。

以下是代码:

$todays_date = date("D");

if($todays_date == 'Fri' || $todays_date == 'Sat'){
    $open_hours = '2pm - 1am';
    $open = '14'; 
    $close = '01';
    $close_soon = '00';
} else {
    $open_hours = '4pm - 12am';
    $open = '16'; 
    $close = '00';
    $close_soon = '23';
} 
$hour_now = date("H");

if($hour_now == $close_soon){
    $open_close_text = '<span style="color:#F60"><b>Closing Soon</b></span>';
} else {

if($hour_now > $open && $hour_now < $close){
    $open_close_text = '<span style="color:#090"><b>Open Now</b></span>';
} else {
    $open_close_text = '<span style="color:#F00"><b>Closed Now</b></span>';
}
}

有没有办法纠正这个问题?我觉得我也会遇到一个问题,当太阳在午夜过夜到周一时会显示为午夜关闭,但这不应该发生?

感谢。

1 个答案:

答案 0 :(得分:1)

这里有一个很好的答案:Determine If Business Is Open/Closed Based On Business Hours

这里有一个关于GitHub的PHP课程,听起来它会像你以后那样做:https://github.com/coryetzkorn/php-store-hours

但是,如果你想自己做,那就是一个简单的答案(它不会处理你的周末/工作日问题)和一个更复杂的答案。

简单的答案是,您需要添加一个逻辑块,以便在关闭时间早于开放时间之前识别。类似的东西:

if ($open < $close) {
    if($hour_now > $open && $hour_now < $close){
        $open_close_text = '<span style="color:#090"><b>Open Now</b></span>';
    } else {
        $open_close_text = '<span style="color:#F00"><b>Closed Now</b></span>';
    }
} else {
    if($hour_now < $open && $hour_now > $close){
        $open_close_text = '<span style="color:#F00"><b>Closed Now</b></span>';
    } else {
        $open_close_text = '<span style="color:#090"><b>Open Now</b></span>';
    }
}

但这不会解决你的周末问题。正如评论中所提到的,您最好利用您的时间使用PHP的内置strtotime函数生成实际时间戳,并计算出从那里显示的内容。

但实际上,这是一个已解决的问题 - 您需要编程的大部分内容已经被其他人解决了!因此,除非这是一个学习练习,否则我建议您查看现有的解决方案。