IntlDateFormatter php 日本年份转换 return false for 2019

IntlDateFormatter php japanese year convertion return false for 2019

我要转换

令和元年8月 = 2019年8月

参考 https://www.conservapedia.com/Japanese_dates

我得到这些

为此,我尝试了如下代码“平成 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. 日本纪元系统不按年份切换,而是按一年中的日期切换

平成(Heisei) 结束于 2019-04-30,令和(Reiwa) 开始于 2019-05-01,所以如果您需要的话,您提到的年度 table 不完整在转换年份(例如 2019)中转换特定日期。

例如1月平成31和12月令和1都是公元2019年,所以当你只转换年份部分时,它们会显示相同的结果。

  1. PHP并不总是有最新的table里面

在我的本地,“$formatter->parse('令和元年8月');”返回 1970-01,Unix 纪元时间可能来自空值。发生这种情况是因为我使用 PHP 但不知道日本纪元改为令和。

IntlDateFormatter 在 pecl php_intl 扩展中,调用 ICU 库。 ICU 图书馆 supports the new era name 令和 at its verion 64.2.

您可以使用 "ICU version" 检查您的 phpinfo(),如果它小于 64.2,它就不会正确地转换指令和。

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

如果您在最新可用的 PHP 上找不到 64.2+,您可能需要自己用以后的 ICU 库编译 intl 扩展。