2012-02-29 82 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() 
);