我的系统中有几家商店。现在我在线想要展示开放的商店,或者如果现在时间在关闭时间之前将开放。我使用的时间字符串是24小时格式,如" 01:00"和" 23:22"我提出了这样的代码:
public function willOpen($open, $closed, $nowTime) {
$open = str_replace(":", "", $open);
$closed = str_replace(":", "", $closed);
$nowTime = str_replace(":", "", $nowTime);
if ($open >= $nowTime) {
if ($closed <= $nowTime) {
return false;
} else {
return true;
}
}
return false;
}
但这似乎不对,因为如果关闭时间是针对前的。 01:00和当前时间是9:00,商店将在11:00开放,然后这段代码将返回false,因为关闭时间比现在时间更短......
最好的办法是什么?
答案 0 :(得分:1)
我会将所有日期转换为unix时间并从中进行比较。它更精确,专为此类设计而设计。 date(“U”)是自epoc以来的unix时间(并且是一个整数),因此比较&gt;和&lt;在它上面是一件轻而易举的事。
$open = date("U",strtotime($open));
$closed = date("U",strtotime($closed));
$nowTime = date("U");
if ($open >= $nowTime) {
if ($closed <= $nowTime) {
return false;
}
else {
return true;
}
}
return false;
答案 1 :(得分:1)
最好的方法是使用DateTime类,因为支持时间操作。所以它会是这样的:
function willOpen(Datetime $open, Datetime $closed)
{
$nowTime = new DateTime(); # defaults to now
// if ($nowTime > $closed) ...
}
$open = Datetime::createFromFormat('H:i', '01:00');
$closed = Datetime::createFromFormat('H:i', '09:00');
如果第二天关闭,那么你可能会有点像:
$closed->add(new DateInterval('P1DT12H')); # 1 day + 12 hours