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