PHP, как я могу локализовать дату после 2038 года
Я пытаюсь использовать локализованные даты после 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?
1 ответ
Мы получаем ту же проблему здесь. Эта проблема проявляется на 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). Cf: http://php.net/manual/en/function.date.php)