我正在尝试创建一个日期和时间函数来检查给定的日期时间和时区是否已通过,但即使我输入了 future 的日期,我的函数也始终返回 true。
我有下面的示例类
<?php
class JobTimer{
public function __construct() {
}
public function isDateTime($startOn, $timezone = "GMT"){
$nowTime = new \DateTime("NOW", new \DateTimeZone($timezone));
$startTime = \DateTime::createFromFormat('M d, Y H:i:s', $startOn, new \DateTimeZone($timezone));
return ($nowTime >= $startTime ? true : false);
}
}
?>
用途
一切都返回 true,我的期望是如果基于 timezone
的当前时间尚未过去,则返回 false
,或者当时间已过去或返回 true
时时间是现在
<?php
$job = new JobTimer();
//if($job->isDateTime("2019-05-02 12:00AM", "Asia/Kuala_Lumpur")){
//if($job->isDateTime("2021-05-02 12:00AM", "Asia/Kuala_Lumpur")){
if($job->isDateTime("2020-05-02 12:00AM", "Asia/Kuala_Lumpur")){
echo "YES";
}else{
echo "NO";
}
?>
最佳答案
在 JobTimer 类中 $startTime
为 false,因为 DateTime::createFromFormat()
的格式与作为参数传入的日期格式不匹配并导致其失败。
M d, Y H:i:s
与 May 02, 2020 12:00:00
匹配,这不是您传递给该类的内容。
您应该使用:
$startTime = \DateTime::createFromFormat('Y-m-d H:iA', $startOn, new \DateTimeZone($timezone));
工作代码:
class JobTimer{
public function __construct() {
}
public function isDateTime($startOn, $timezone = "GMT"){
$nowTime = new \DateTime("NOW", new \DateTimeZone($timezone));
$startTime = \DateTime::createFromFormat('Y-m-d H:iA', $startOn, new \DateTimeZone($timezone));
return $nowTime >= $startTime;
}
}
$job = new JobTimer();
if($job->isDateTime("2020-05-02 12:00AM", "Asia/Kuala_Lumpur")){
echo "YES";
}else{
echo "NO";
}
输出:
NO
关于php - 使用时区检查日期和时间何时过去时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61532748/