Php 如何修复MessageFormatter返回不正确的日期格式?
我有一个简单的代码,以前可以正常工作:Php 如何修复MessageFormatter返回不正确的日期格式?,php,date,formatting,strftime,Php,Date,Formatting,Strftime,我有一个简单的代码,以前可以正常工作: <?php $dateFormatted = \MessageFormatter::formatMessage( 'en_US', "{0, date, d MMMM YYYY}", [new \DateTime()] ); var_dump($dateFormatted); // 28 December 2019 直到2050年,每年我都会这样检查。据我所知,这只发生在去年12月,但我不确定。2018年未受影响。为什么会发生这种情况,有
<?php
$dateFormatted = \MessageFormatter::formatMessage(
'en_US', "{0, date, d MMMM YYYY}", [new \DateTime()]
);
var_dump($dateFormatted); // 28 December 2019
直到2050年,每年我都会这样检查。据我所知,这只发生在去年12月,但我不确定。2018年未受影响。为什么会发生这种情况,有什么解决办法吗
php 7.1版
Upd:看来strftime也有同样的问题
Upd2:strftime用%Y而不是%G显示正确的年份不幸的是,MessageFormatter的文档没有解释日期格式。但我找到了解决办法。您可以使用较低的y。尝试: 对于strftime,您可以使用strftime%d%B%Y。
我认为这个问题来自格式标准不幸的是,MessageFormatter的文档没有解释日期格式。但我找到了解决办法。您可以使用较低的y。尝试: 对于strftime,您可以使用strftime%d%B%Y。 我认为这个问题来自于格式标准Uppper case Y表示一年中的一周,根据ISO-8601:1988周数定义,日历年的最后几天通常属于下一年的第一周。您需要小写的y: Uppper case Y是指根据ISO-8601:1988周数定义的一年中的一周,其中日历年的最后几天通常属于下一年的第一周。您需要小写的y:
这真是个好问题。但回显strftime%d%B%Y没有问题;您的strftime示例是什么?是的,echo strftime%d%B%Y;返回正确的日期,这很奇怪,因为%G明年仍然返回。谢谢你指出这是一个很好的问题。但回显strftime%d%B%Y没有问题;您的strftime示例是什么?是的,echo strftime%d%B%Y;返回正确的日期,这很奇怪,因为%G明年仍然返回。感谢您指出,感谢您的澄清。我原以为2018年不受影响,但错了,检查了29日,正好是周六,所以没有新的一周需要澄清。我原以为2018年不受影响,但错了,检查了29日,正好是周六,所以不是新的一周
var_dump($dateFormatted); // 29 December 2020
$dateFormatted = \MessageFormatter::formatMessage(
'en_US', "{0, date, d MMMM y}", [new \DateTime()]
);
echo $dateFormatted; // 30 December 2019
<?php
$dateFormatted = \MessageFormatter::formatMessage(
'en_US', "{0, date, d MMMM YYYY} / {0, date, d MMMM yyyy}", [new \DateTime('2019-12-29')]
);
var_dump($dateFormatted);
string(37) " 29 December 2020 / 29 December 2019"