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)

Другие вопросы по тегам