gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 10:07:03 25 4
gpt4 key购买 nike

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

用法
一切归真,我的期望是回归 false如果当前时间基于 timezone尚未过去或返回 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 类中 $startTime是错误的,因为您的格式为 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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com