php - 如何修复 MessageFormatter 返回格式不正确的日期?
问题描述
我有这个简单的代码,它以前可以正常工作:
<?php
$dateFormatted = \MessageFormatter::formatMessage(
'en_US', "{0, date, d MMMM YYYY}", [new \DateTime()]
);
var_dump($dateFormatted); // 28 December 2019
但从 2019 年 12 月 29 日开始,它会显示明年的日期:
var_dump($dateFormatted); // 29 December 2020
直到 2050 年,我检查的每一年都会发生这种情况。据我所知,它只发生在去年 12 月的几天,但我不确定。2018 年不受影响。为什么会发生这种情况,有什么解决办法吗?
7.1 版
更新:看起来strftime
有同样的问题
Upd2:strftime
显示正确的年份,%Y
但不显示%G
解决方案
根据 ISO-8601:1988 周数定义,日历年的最后几天通常属于明年的第一周,大写Y
表示“一年中的一周”(参考)中的年份。你想要小写y
:
<?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"
推荐阅读
- python - 处理范围检查和列表的 Python 3 浮点错误
- firebase - Firebase 云函数 - 未处理的错误 RangeError
- python - SQLAlchemy 使用 filter_by 动态创建查询
- user-interface - 滚动 swt Scrollcomposite 时 jfreechart 上的灰色阴影
- c - 使用scanf输出x的标准逻辑函数?
- android - 单击android studio时从列表中获取项目ID
- c# - 如何通过restful api传递部分对象(json)
- javascript - 所有 CSS 网格列的相同 h2 容器高度
- javascript - False 语句返回一个空数组
- excel - 获取列中最常用的 10 个名称