使用时区检查日期和时间何时过去的问题

Problem in checking when date and time has elapse using timezone

我正在尝试创建一个日期和时间函数来检查给定的日期时间和时区是否已通过,但我的函数始终 returning 为真,即使我输入了未来的日期。

我有下面的例子class

 <?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);
    }
}
?>

用法 一切都是 returning true,我的期望是 return false 如果基于 timezone 的当前时间尚未过去,或者 return true时间已过或时间为 now

  <?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 class $startTime 中为 false,因为您 DateTime::createFromFormat() 的格式与您作为参数传入的日期格式不匹配并导致它失败。

M d, Y H:i:s 匹配 May 02, 2020 12:00:00,这不是您传递给 class.

的内容

您应该使用:

$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

将您的函数更改为:

public function isDateTime($startOn, $timezone = "GMT"){

    $nowTime = new \DateTime("NOW", new \DateTimeZone($timezone));    
    $startTime = new \DateTime($startOn, new \DateTimeZone($timezone));
    return ($nowTime >= $startTime ? true : false);
}

您传递给 createFromFormat 的参数是错误的,因此没有正确创建 DateTime。您可以只传递 $startOnDateTimeZone 来创建 DateTime

的实例