首页 > 解决方案 > 日期时间修改比较的PHP问题

问题描述

这是我在 cron 每半小时调用一次的 PHP 脚本时遇到的问题:

$dt = new DateTime();
$dt->modify("+2 hours");   

if ($dt > new DateTime("01:00:00") && $dt < new DateTime("2:00:00")) {      
    include_once("../p-auto.php");
    $fipw = fopen('../logs/cron_f.txt', 'a');
    fwrite($fipw, "p-auto cron: ".date("F j, Y, g:i a").PHP_EOL);
    fclose($fipw);
}else{
    $fipw = fopen('../logs/cron_f.txt', 'a');
    fwrite($fipw, "NOT p-auto: ".date("F j, Y, g:i a").PHP_EOL);
    fclose($fipw);

}

我在服务器上看到的日志是这样的:

NOT p-auto: April 20, 2020, 11:07 pm
NOT p-auto: April 20, 2020, 11:39 pm
NOT p-auto: April 21, 2020, 12:07 am
NOT p-auto: April 21, 2020, 12:36 am
NOT p-auto: April 21, 2020, 1:06 am
NOT p-auto: April 21, 2020, 1:36 am
NOT p-auto: April 21, 2020, 2:08 am
NOT p-auto: April 21, 2020, 2:36 am
NOT p-auto: April 21, 2020, 3:06 am
NOT p-auto: April 21, 2020, 3:36 am
NOT p-auto: April 21, 2020, 4:08 am

一旦我添加了,问题似乎就开始了$dt-modify,我怀疑是因为我在日期更改之间修改了 dateTime,这会导致 if 测试出现某种错误。

现在,我无法修改服务器的设置(它不属于我,我无法要求任何类型的自定义),并且服务器的时区配置为比实际本地时间晚 2 小时。我只能修改我的 PHP 脚本,所以我能实现的有点有限。

请如果有人提出某种建议,我一周以来就对这个问题感到震惊......

标签: phpdatedatetime

解决方案


现在,我无法修改服务器的设置(它不属于我,我无法要求任何类型的自定义),并且服务器的时区配置为比实际本地时间晚 2 小时。我只能修改我的 PHP 脚本

这就是您所需要的,指定您希望自己的脚本实例操作的时区,可以在运行时使用date_default_timezone_set()

由于最初尝试手动向 datetime 实例添加两个小时的变通办法导致的跨越日期边界的任何问题,都不应再出现。


推荐阅读