datetime — Ошибка преобразования в UTC после 2038 года в 64-битном Unix переполнении стека

Мне нужно преобразовать информацию о дате и времени из местного времени (gtm + 1) в UTC, используя php (5.4)
на Centos 7,4 64 бит

Я попробовал следующую процедуру:

function convertToUtc ($date)
{
$dateTime = new DateTime ($date, new DateTimeZone('Europe/Rome'));
$dateTime->setTimezone(new DateTimeZone('UTC'));
return $dateTime->format('Y-m-d') . 'T' . $dateTime->format('H:i:s') . 'Z';
}

Это работает до 2038 года, после этого он не рассчитывает DST, возвращая всегда смещение в 1 час:

2037: все хорошо

LOCAL TIME           ->  UTC TIME

2037-03-28 10:12:13  ->  2037-03-28T09:12:13Z   the day before dst change

2037-03-29 10:12:13  ->  2037-03-29T08:12:13Z   the first DST day

2037-10-24 10:12:13  ->  2037-10-24T08:12:13Z   the last DST day

2037-10-25 10:12:13  ->  2037-10-25T09:12:13Z   the day after


2038 : ok until dst change

2038-03-27 10:12:13  ->  2038-03-27T09:12:13Z   OK

2038-03-28 10:12:13  ->  2038-03-28T09:12:13Z   error : should be 2038-03-28 08:12:13Z

2038-10-30 10:12:13  ->  2038-10-30T09:12:13Z   error : should be 2038-10-30 08:12:13Z

2038-10-31 10:12:13  ->  2038-10-31T09:12:13Z   OK

ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ :
арифметика даты, по-видимому, не зависит от ограничения на отметку времени unix (19/1/2018), поскольку следующие выражения работают правильно:

$date = new DateTime();
$date->modify('+100 year');
echo $date->format('Y-m-d');

(Печатает 2118-04-23)

Какие-либо предложения ?
С уважением Маурицио

5

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]