IntlDateFormatter 返回错误的年份

IntlDateFormatter returning the wrong year

如果你运行下面的代码

<?php

$date = new DateTime('2019-12-30 19:45:00', new DateTimeZone('Europe/London'));
$formatter = new IntlDateFormatter(
    'en_GB',
    null,
    null,
    'Europe/London',
    IntlDateFormatter::GREGORIAN,
    'MMMM YYYY'
);

echo $formatter->format($date);

它会回应 December 2020。这是 class 的错误,还是我有问题,正如我所期望的 return December 2019

根据: http://userguide.icu-project.org/formatparse/datetime

Y 代表 "Week of Year" 的年份(不管它是什么意思),y 是我们习惯的常规年份参考。因此,要获得当前年份,请将 YYYY 替换为 yyyy 并且它应该完成工作

您以错误的方式使用了此功能。我知道 ideea 是以本地特定方式格式化日期和时间。

像英国人那样写日期和时间:

Monday, 30 December 2019 at 19:45:00 Greenwich Mean Time

在美国特朗普先生会说:

Monday, December 30, 2019 at 7:45:00 PM Greenwich Mean Time

对于德国,我会这样说:

Montag, 30. Dezember 2019 um 19:45:00 Mittlere Greenwich-Zeit

Torwald Linus prolly 在芬兰会说:

måndag 30 december 2019 kl. 19:45:00 Greenwichtid

最后在洪都拉斯,Pedro de Alvarado 会说:

lunes 30 de diciembre de 2019, 19:45:00 hora del meridiano de Greenwich

(我喜欢这个功能:))

因为如果您想要 2019-12-30 这样的结果,您可能会使用格式

$date = new DateTime('2019-12-30 19:45:00', new DateTimeZone('Europe/London'));

echo $date->format('Y-m-d');