日期格式在PHP中返回错误的年份,DateFmt在法语中



我写了这个函数

function formatted_month($month) {
$first_day_in_month = new DateTime('2022-01-01');
$fmt = datefmt_create(
'en_EN',
IntlDateFormatter::FULL,
IntlDateFormatter::FULL,
'Europe/Paris',
IntlDateFormatter::GREGORIAN,
'MMMM YY'
);
$formatted_month = datefmt_format($fmt,$first_day_in_month);
return $formatted_month;
}

此返回1月22日如预期,但此代码:

function formatted_month($month) {
$first_day_in_month = new DateTime('2022-01-01');
$fmt = datefmt_create(
'fr_FR',
IntlDateFormatter::FULL,
IntlDateFormatter::FULL,
'Europe/Paris',
IntlDateFormatter::GREGORIAN,
'MMMM YY'
);
$formatted_month = datefmt_format($fmt,$first_day_in_month);
return $formatted_month;
}

返回1月21日。唯一的区别是这条线

'en_EN', -> 'fr_FR'

es_es和非英语语言也是如此。。。

你有什么解释吗?感谢

这是格式化字符串的一个细微错误,即存在多个不同的年份说明符:

  • 小写yyyyyy是您所期望的正常年份,用于月份和日期
  • 大写CCD_ 3或CCD_;"一年中的一周">

对于大多数日期,这些日期是相同的,因此差异很容易被忽视。但在一年的开始和结束,一周从哪里开始和结束很重要——1月1日可能仍然是前一年的最后一周,12月31日可能是下一年的第一周。

如果我们使用'ww YYYY, MMMM yyyy'的格式字符串来显示周数和年份的两个定义,我们可以清楚地看到差异:

  • 对于CCD_ 6;2022年1月1日">
  • 对于CCD_ 7;2021年1月52日">

所以总是使用小写";yy";表单,除非您实际显示的是周数。

function formatted_month($month) {
$first_day_in_month = new DateTime('2022-01-01');
$fmt = datefmt_create(
'fr_FR',
IntlDateFormatter::FULL,
IntlDateFormatter::FULL,
'Europe/Paris',
IntlDateFormatter::GREGORIAN,
'MMMM yy'
);
$formatted_month = datefmt_format($fmt,$first_day_in_month);
return $formatted_month;
}

最新更新