IntlDateFormatter php преобразование японского года возвращает false в 2019 году - PullRequest
1 голос
/ 09 октября 2019

Я хочу конвертировать

令和元年8月 = 2019年8月

Ссылка https://www.conservapedia.com/Japanese_dates

Здесь я получаю эти

enter image description here

Для этого я попробовал код, подобный приведенному ниже здесь " 成 成 31 年 8 月 ", возвращая 2019 год, но в соответствии с ref он должен 令 和 元年 8 月 Пожалуйста, предложите мне, есть ли какое-либо решение, такЯ могу установить свой код как ссылку ..

$formatter = new IntlDateFormatter(
    'ja_JP@calendar=japanese',
    IntlDateFormatter::FULL,
    IntlDateFormatter::FULL,
    'Europe/Madrid',
    IntlDateFormatter::TRADITIONAL,
    'Gy年M月'
);
$ts = $formatter->parse('令和元年8月');
//$ts = $formatter->parse('平成31年8月');
var_dump($ts, date('Y-m', $ts));

___ FIDDLE ___

1 Ответ

2 голосов
/ 10 октября 2019

Кажется, есть две проблемы.

  1. Система эпохи Японии не переключается по годам, но по дате в году

平 成 (Хейсей) заканчивается в2019-04-30, 令 和 (Reiwa) началось в 2019-05-01, поэтому указанная вами годовая таблица неполна, если вам нужно преобразовать конкретную дату в год перехода, например 2019.

Например, январь 成 成 31 и декабрь 和 are 1 относятся к 2019 году нашей эры. Поэтому, когда вы конвертируете только часть года, они будут показывать один и тот же результат.

PHP не всегда имеет обновленную таблицу внутри

На моем локальном компьютере, "$ formatter-> parse ('令 和 元年 8 月');"вернул мне 1970-01, время эпохи Unix, вероятно, исходит из нулевого значения. Это происходит потому, что я использую PHP, но еще не знаю, что японская эра изменилась на 令 和.

IntlDateFormatter находится в расширении pecl php_intl, которое вызывает библиотеку ICU. Библиотека ICU поддерживает новое имя эры 令 和 в своей версии 64.2 .

Вы можете проверить свой phpinfo () с помощью «версии ICU», и если она меньше 64.2, она не будетпреобразуйте 和 和 правильно.

$ php --info | grep "ICU version"
ICU version => 61.1

Если вы не можете найти 64.2+ на вашем последнем доступном PHP, вам, возможно, придется самостоятельно скомпилировать расширение int с более поздней библиотекой ICU.

...