字符串格式

时间:2015-07-29 15:36:52

标签: php time

我的系统中有几家商店。现在我在线想要展示开放的商店,或者如果现在时间在关闭时间之前将开放。我使用的时间字符串是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,因为关闭时间比现在时间更短......

最好的办法是什么?

2 个答案:

答案 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