PHP 字符串格式的日期时间操作

PHP datetime operations from string format

我的系统中有几家商店。现在,如果现在时间早于关门时间,我想在线显示正在营业或将要营业的商店。我使用的时间字符串是 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;
}

但这似乎不对,因为如果关闭时间是ex。 01:00 并且当前时间是 9:00 并且商店将在 11:00 之前开门然后此代码将 return false 因为关闭时间比现在时间短... ..

最好的方法是什么?

我会将所有日期转换为 unix 时间并与之进行比较。它更准确,专为此类事情而设计。 date("U") 是自 epoc 以来的 unix 时间(并且是一个整数),因此比较 > 和 < 是一件轻而易举的事。

$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;

最好的方法是使用 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