Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何修复MessageFormatter返回不正确的日期格式?_Php_Date_Formatting_Strftime - Fatal编程技术网

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"