php - 使用时区检查日期和时间何时过去时出现问题

标签 php datetime timezone date-comparison

我正在尝试创建一个日期和时间函数来检查给定的日期时间和时区是否已通过,但即使我输入了 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:sMay 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

Demo

关于php - 使用时区检查日期和时间何时过去时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61532748/

相关文章:

php - 将PDO与Oracle数据库连接

php - 如何从 transactionId 中获取 payKey?

javascript - 生成并格式化当前日期和时间

php - 从Flash发送JSON到PHP

php - 是否可以检测并避免用户在在线测试项目中打开新选项卡?

php - 如何在 PHP 中将 "0000-00-00 00:00:00"正确设置为 DateTime

c# - 根据日期时间过滤大列表

javascript - 伦敦时间与 GMT 不同的日期

ios - swift中以下时区之间有什么区别

php - PHP 中的时区