2010-08-29 62 views
19

上殼,我的服務器時間(在bash簡單date): 太陽8月29日10點37分12秒EDT 2010獲取服務器時間 - 時區問題

當我運行的代碼php -r "echo date('Y-m-d H:i:s');"我得到:2010 -08-29 10:37:10

但是當我執行一個具有echo date('Y-m-d H:i:s');的php腳本時,我得到了不同的時間 - 因爲php認爲時區是UTC(服務器時間是EDT)。

我的php.ini文件中沒有時區設置,並且我不會想改變任何東西 - 因爲我不知道什麼影響它會對這臺服務器上運行的網站。

有一個簡單的方法來獲取該設置服務器的時區的服務器時間?

回答

14

根據php.ini directives手冊頁,如果您使用的版本高於5.3,則默認情況下未設置時區。然後,如果你看看在頁面date_default_timezone_get,它使用以下順序獲取時區:

* Reading the timezone set using the date_default_timezone_set() function (if any) 
* Reading the TZ environment variable (if non empty) (Prior to PHP 5.3.0) 
* Reading the value of the date.timezone ini option (if set) 
* Querying the host operating system (if supported and allowed by the OS) 

UTC是默認的,如果所有的失敗,所以這可能是一個很好的起點。

2

服務器應該總是有一個在php.ini文件中指定的時區。 PHP 5.3,甚至引發聲明如果不是這種情況,如果你試圖構建對象沒有明確指定一個時區(帶DateTimezone對象),或具有默認的(無論是通過date.timezonedate_default_timezone_set)的DateTime擴展將拋出異常。

通過你所描述的東西,最有可能的情況是:

  • 不同的php.ini文件在兩種情況下被使用。在第一種情況下,沒有指定默認時區,所以PHP試圖從機器的系統範圍時區中推斷出一個時區。
  • (第二個)腳本調用date_default_timezone_set('UTC')或等效。
2

晚黨 美國時區,但如果你想設置不修改php.ini中的時區,你可以把PHP代碼一個

date_default_timezone_set('GMT'); 
date_default_timezone_set('Europe/Zurich'); 
date_default_timezone_set('America/New_York'); 
:這些字符串