PHP存储小时的夜晚

时间:2017-12-27 20:46:29

标签: php date time

因此,我正在尝试使用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天的截止日期,而实际上应该检查它是否在晚上开放。

是否有可靠的方法让它发挥作用?

2 个答案:

答案 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";
}

Highlighting usages of a symbol in the current file