я пытаюсь использовать локализованные даты после 2038 года с php
strftime использует метку времени, чтобы она не работала после 2038 года
DateTime не локализован …
Поэтому я пытаюсь использовать IntlDateFormatter с DateTime:
$d = DateTime::createFromFormat('Y-m-d', '2040-01-01');
$fmt = new IntlDateFormatter(
'fr_FR',
IntlDateFormatter::FULL,
IntlDateFormatter::FULL,
'America/Los_Angeles',
IntlDateFormatter::GREGORIAN
);
echo $fmt->format($d);
echo $fmt->getErrorMessage();
вот что я получаю:
datefmt_format: невозможно получить метку времени: U_ILLEGAL_ARGUMENT_ERROR
На самом деле я думаю, IntlDateFormatter внутренне конвертировать дату в метку времени …
Так как я могу локализовать дату после 2038 года в php?
мы получаем ту же проблему здесь.
Эта проблема проявляется на 32-разрядных компьютерах, поскольку средство форматирования изменяет значение DateTime на целочисленную временную метку для его обработки. Даты вне эпохи (1970) + — maxint выдаст вам ошибку.
Есть два способа исправить это:
1 — использовать 64-битный сервер.
2 — исправить PHP IntlDateFormatter
Мы идем с 1 — здесь, удачи!
(Допустимый диапазон отметки времени обычно от пт, 13 декабря 1901 г. 20:45:54 по Гринвичу до вт, 19 января 2038 г. 03:14:07 по Гринвичу. (Это даты, которые соответствуют минимальным и максимальным значениям для 32 -битное целое число со знаком). Однако, до PHP 5.1.0 этот диапазон был ограничен с 01-01-1970 до 19-01-2038 в некоторых системах (например, Windows). http://php.net/manual/en/function.date.php )
Других решений пока нет …