2011-12-03 74 views
7

PHP date() & time()返回不正確的時間:PHP錯誤的日期/時間

date.timezone = "Europe/Riga"date()返回的時間爲03-12-2011 08:57:12,但系統時間爲03-12-2011 01:57:12(時區歐洲/里加 - 在那一刻,正確的時間)。 當我更改時區,以「歐洲/倫敦」,時間變更爲03-12-2011 06:57:12(實際時間02-12-2011 23:57:12)由date/hwclock --show返回

時間是正確的(03-12-2011 01:57:12與系統時區設置爲里加)

OS:Debian的6.0

我已經檢查了關於SO/Google上類似問題的大部分問題,但它們似乎都指定了錯誤的時區。

據我所知,php - > os之間存在問題。 當然,因爲不正確的時間偏移總是恆定的,我可以減去差異,但這不是一個合適的解決方案。

任何想法將不勝感激。

+1

你用什麼'date()'值?例如'date('Ymd H:i:s')' –

+1

是 - 'date('Ymd H:i:s')' – relic

+0

如果使用DateTime類確定日期並與DateTimeZone一起使用會發生什麼? ?例如'$ d = new DateTime('',new DateTimeZone('Europe/Riga')); echo $ d-> format('Y-m-d H:i:s');' –

回答

3

該問題與我在其中一臺服務器上看到的相似。看起來喜歡bug in php 5.3.2-1。嘗試在錯誤報告中運行php腳本併發布結果。

+1

似乎這不是一個實際的錯誤。記者只是有其他代碼重置默認時區。從這個意義上說,你應該注意這一點。小心可能影響的代碼和.ini設置。 – ficuscr

10

閱讀PHP手冊似乎date.timezone的行爲受php.ini中的設置影響。 還有另一種方法來設置所有日期/時間函數中的默認時區,它是date_default_timezone_set。嘗試使用設置:

date_default_timezone_set('Europe/Riga'); 

,而不是你date.timezone代碼。

+0

謝謝。但我已經嘗試過,但沒有成功。事實上,當我將時區從里加改爲倫敦時,時差爲2小時表明時區選擇「有效」,但問題在於初始時間值。 – relic

2

系統的時區可能是錯誤的。儘管php date.timezone(在php.ini中)和服務器的系統時間都是正確的,但這會導致PHP date()函數給出的時間發生變化。

-4

PHP時間基於使用GMT和UTC以後的時代。大多數人現在稱之爲unix時間。因爲PHP使用unix時間,所以不使用時區。我相信以秒爲單位減去時區小時數是調整差異的正確方法。

+0

Unix時間是一個簡單的計數,因爲時間固定 - 它完全不受時區影響。此外,PHP有一個相當不錯的時區處理;絕對沒有理由跳過它並編寫自己的。 –

1

我有一些問題與時區了。這對於某人來說可能非常方便。

在我的情況下,智利蘇美爾時間CLST返回錯誤的timzeone抵消。

更新timezonedb爲我工作。

轉到:https://pecl.php.net/package/timezonedb

對於WIDNOWS下載DLL的最新版本,複製到 「外部」 目錄。編輯php。ini和下面放線:

延長= php_timezonedb.dll

對於Linux您可以使用:

PECL安裝timezonedb

,並在php.ini放:

擴展= php_timezonedb.so