显示午夜过后数小时的开放和关闭通知


Displaying open and closed notice for hours past midnight?

我有这个代码,我在另一个网站上使用它来显示商店的打开和关闭状态。我正在为另一家营业到午夜的商店使用它。因此,代码认为商店是关闭的,因为它将时间注册为关闭时间之后的时间,因为它是"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>';
}
}

有什么方法可以纠正这个问题吗?我想我也会遇到一个问题,当一天在周日午夜后切换到周一时,它会显示为午夜关闭,但这不应该发生吗?

谢谢。

对于这个类似的问题,这里有一个很好的答案:根据营业时间确定业务是否打开/关闭

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函数来使用您的时间生成实际的时间戳,并从中计算出要显示的内容。

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