2012-02-29 24 views
2

我得到使用IntlDateFormatter不正确的结果:PHP 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)。

我找不出什么问题。

感谢您的帮助。

+0

适合我。无法重现。可能是一个时区问题。 – Gordon 2012-02-29 14:02:00

+0

我发现这个问题: 有必要指出时区,似乎IntlDateFormatter不会从php.ini中取时区(如php日期函数)。 – marcosberm 2012-02-29 14:51:28

+0

手册中提到“时区ID,默认为系统默认值。”虽然 – Gordon 2012-02-29 15:13:54

回答

4

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

TimeZone保持被称为默认时区一个静态的时区对象。这是当用户没有指定时区时隐式使用的时区。 ICU会尝试将其与主机操作系统时区相匹配。

总之,如果你想从国际机场改默认时区以匹配date()说,你必须改变你的操作系统上的时区。但不这样做

您最好在致电IntlDateFormatter::create()时指定时区。如果您希望使用PHP在其他地方使用的默认时区,可以使用date_default_timezone_get()来检索。

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