IntlDateFormatter::format 将年份添加到日期

IntlDateFormatter::format adds a year to a date

这很奇怪,甚至可能是一个错误...

2021 年 12 月 26 日的时间戳 00:00:00 GMT 是 1640476800:

php > var_dump(gmdate("Y-m-d H:i:s", 1640476800));
string(19) "2021-12-26 00:00:00"

但是当我使用 IntlDateFormatter::format() 时,年份变为 2022

php > $idf = new IntlDateFormatter(
    locale: null, 
    dateType: IntlDateFormatter::FULL, 
    timeType: IntlDateFormatter::FULL, 
    pattern: 'YYYY MM d'
);
$idf->setTimeZone("GMT");
var_dump($idf->format(1640476800));
string(10) "2022 12 26"

12 月 26 日之前的日期都可以。我错过了什么吗?在 PHP 7.4、8.0.13 和 8.1.1 上测试,并在我的默认时区 (GMT -5)

感谢 Whosebug 帮助我 rubberduck-debugged 这件事。

ISO 日期格式中的

'Y' 用于指定 "Week Year",这是一个非常混乱的基于周的年份,它与 'calendar' 年份非常相似,除了有时在它的开头或结尾。

要指定 'calendar' 年份,术语为 'y'(小写)。所以模式 YYYY MM d 实际上必须是 yyyy MM d.