我有这个代码,我在另一个网站上使用它来显示商店的打开和关闭状态。我正在为另一家营业到午夜的商店使用它。因此,代码认为商店是关闭的,因为它将时间注册为关闭时间之后的时间,因为它是"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
函数来使用您的时间生成实际的时间戳,并从中计算出要显示的内容。
但实际上,这是一个已经解决的问题——你需要编程的大多数事情已经被其他人解决了!因此,除非这是一个学习练习,否则我建议您查看顶部的现有解决方案。