因此,我正在尝试使用PHP为访问者可以订购的网上商店创建一个打开和关闭的消息。
店铺时间目前以以下格式存储:
1 12:00-22:00
2 12:00-23:00
3 closed-closed
4 12:00-02:50
5 12:00-23:00
etc..
所以前3天。打印已关闭的消息非常容易,因为您只需将字符串与日期(“Hi”)进行比较,并检查当前时间是否在de store hours之间。但到了第四天,过夜时间我会挣扎。当时间到达00:00时,它会检查第5天的截止日期,而实际上应该检查它是否在晚上开放。
是否有可靠的方法让它发挥作用?
答案 0 :(得分:2)
我没有考虑您的closed-closed
方案,但这只是一个简单的检查。
$open_close = explode('-', $hours);
// current date and time
$now = new DateTime();
// clone the current datetime and explicity set the time to the open time
$open = clone $now;
$open_time = explode(':', $open_close[0]);
call_user_func_array([$open, 'setTime'], $open_time);
// do the same for the close time
$close_time = explode(':', $open_close[1]);
$close = clone $now;
call_user_func_array([$close, 'setTime'], $close_time);
// if close is greater than close, the close must be the next day unless its a data entry error, but we cant really prevent that, so assume its good and modify the date time for close to be the next day
if ($open > $close) {
$close->modify('+1 day');
}
// now a basic comparison to see if $now is between $open and $close
if ($now < $close && $now >= $open) {
echo 'OPEN';
} else {
echo 'Closed';
}
我也没有说明你需要将星期几映射到当天,我假设你已经设法了。如果没有,那么我认为你需要做一些调整,但这总体上可以让你进行准确的比较。
答案 1 :(得分:1)
我认为这可行 我将打开和关闭时间转换为unix值。
如果在打开之前关闭,我会在几秒钟内添加一天。
现在我有一个unix值,当它打开时和今天关闭时,我需要做的就是与time()进行比较。
$otime="16:15";
$ctime="00:50";
$open = strtotime(date("Y-m-d ").$otime);
$close = strtotime(date("Y-m-d ").$ctime);
If($close<$open) $close += 3600*24;
If(time() >= $open && time() < $close){
Echo "open";
}Else{
Echo "closed";
}