我使用 IntlDateFormatter 得到不正确的结果:

$dateFormater = \IntlDateFormatter::create(
'en_EN',
\IntlDateFormatter::LONG,
\IntlDateFormatter::NONE
);

$a = date('Y/m/d H:i:s',1332712800); //2012/03/26 00:00:00
$b = $dateFormater->format(1332712800); //March 25, 2012

但这仅发生在 2012/03/26 和 2012/10/28 之间且没有小时 (00:00:00) 的日期。

我无法找出问题所在。

谢谢您的帮助。

有帮助吗?

解决方案

http://userguide.icu-project.org/datetime/timezone#TOC-Factory-Methods-and-the-Default-Tim

TimeZone 维护一个静态时区对象,称为 默认时区. 。这是当用户未指定时隐式使用的时区。ICU 尝试将其与主机操作系统时区相匹配。

简而言之,如果你想改变 默认时区 从 intl 匹配什么 date() 说,您必须更改操作系统上的时区。但 不要那样做.

最好在调用中指定时区 IntlDateFormatter::create(). 。如果您希望使用 PHP 在其他地方使用的默认时区,可以使用以下命令检索 date_default_timezone_get().

$dateFormater = \IntlDateFormatter::create(
    'en_EN',
    \IntlDateFormatter::LONG,
    \IntlDateFormatter::NONE,
    date_default_timezone_get()
);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top