Рассмотрим следующий код
$participantTriggerDate = new \DateTime('2019-06-14 09:40:00.000000', new DateTimeZone('US/Central'));
$dateInterval = new \DateInterval('P150D');
$newDate = \DateTimeImmutable::createFromMutable($participantTriggerDate);
$newDate = $newDate->add($dateInterval);
echo(json_encode([
'participantTriggerDate' => $participantTriggerDate,
'newDate' => $newDate,
]));
Этот код производит следующий вывод:
{
"participantTriggerDate": {
"date": "2019-06-14 09:40:00.000000",
"timezone_type": 3,
"timezone": "US/Central"
},
"newDate": {
"date": "2019-11-11 09:40:00.000000",
"timezone_type": 3,
"timezone": "US/Central"
}
}
Однако, поскольку 150 дней после 2019-06-14 пересекают границу летнего времени, не должныPHP вычитать и час от времени? Я думал, что PHP позаботится обо всех беспорядочных вещах DST под капотом. Есть ли способ для меня, чтобы правильно рассчитать это время? Из того, что я прочитал, похоже, что рекомендуемый ответ - преобразовать все в UTC и выполнить там вычисления. Я хотел бы избежать этого, если это возможно. Я подумал, что PHP будет достаточно умен, чтобы знать, что граница DST пересекается, когда я передаю часовой пояс в создание DateTime.