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
.
这很奇怪,甚至可能是一个错误...
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
.