PHP проблемы с модифицированным сравнением DateTime - PullRequest
0 голосов
/ 21 апреля 2020

С этой проблемой я сталкиваюсь в скрипте PHP, который вызывается cron каждые полчаса:

$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 сценарии, поэтому я немного ограничен в том, чего я могу достичь.

Пожалуйста, если у кого-то есть какое-то предложение, я столкнулся с этой проблемой уже неделю… .

1 Ответ

2 голосов
/ 21 апреля 2020

Теперь я не могу изменить настройки сервера (он не принадлежит мне, и я не могу запрашивать какие-либо настройки), а часовой пояс сервера настроен на 2 часа меньше реального местного времени. Я могу изменять только мои PHP сценарии

Это все, что вам нужно, указав часовой пояс, с которым вы хотите работать для своего собственного экземпляра сценария, можно сделать во время выполнения с помощью date_default_timezone_set()

Любые проблемы с пересечением границы даты, вызванные первоначально предпринятой попыткой обходного пути добавления двух часов к экземпляру datetime вручную, не должны больше отображаться для начала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...