2012-06-22 74 views
0

我有下一個問題。我有幾個PHP系統運行在不同的Windows機器上。這些系統密集使用當前時間。在Windows下的PHP,如何獲取忽略時區的當前系統時間?

現在,我配置了php.ini並將其分配給了特定的時區。 Windows也被配置爲相同的時區,並且一切都按預期工作。

但是,在我的國家,國家決定改變夏令時。所以,有時候,管理員改變了Windows時區,並保持php時區不變,從而在系統中造成不一致。其他時間,是自動更改時區的窗口。

從PHP獲取當前系統時間是否有任何方法可忽略時區?

更新

function time_zone_fix($timeGiven = "H:i:s") 
{ 
    $shell = new COM("WScript.Shell") or die("Requires Windows Scripting Host"); 
    $time_bias = -($shell->RegRead("HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\TimeZoneInformation\\ActiveTimeBias"))/60; 
    $timestamp_bias = 60 * 60 * $time_bias; 
    return gmdate($timeGiven, strtotime($timestamp_bias . " seconds")); 
} 

給出當前日期和時間,無論是指定的內容時區/ DSL。 但是,創建一個新的COM接口是非常有效的。

+0

你的問題是什麼?您是否正在爲PHP安裝正確的時區數據,並且您是否保持這些數據是最新的?你說什麼國家?而你正在尋找的「時區」可能是「UTC」。您可以使用ini設置在PHP中指定。 – hakre

+0

問題是它不是一臺服務器,而是幾臺配置不同的服務器。我可以把「正確的」時區放在php.ini中,但由於夏令時會失敗。某些機器會自動更改夏令時,而其他機器會更改該區域來完成此操作。時區介於-4GMT和-3GMT之間(有些情況下,它與-5GMT一起工作)。有些機器會自動更改夏令時,而其他管理員則會手動更改GMT。 – magallanes

+0

只需參考UTC。管理員不能更改UTC時間,這是固定時間點。時區和夏令時只是描述我們在時鐘上查看的內容。 UTC是全球協調時間,所以總是一樣的(至少對我們全球人類來說))。 – hakre

回答

2
gmdate('Y-m-d H:i:s'); 

改變任何你需要的format。它返回「無時區日期和時間」。 gm代表格林威治標準,如GMT(格林尼治標準時間)。格林尼治標準時間已被UTC(世界協調時間)取代,因此函數應該被稱爲utcdate() ...

但時間最便攜表示是Unix timestamp,即自1970年至1901年逝去的秒數-01 00:00:00 UTC,忽略閏秒:

time(); 

time()值是也爲gmdate()第二參數的默認值。

順便說一句,一個leap second定於2012-06-30 23:59:60

注:如果你所要求的一種方式來獲得時間在一定的時區,但沒有夏令時間校正,你可以這樣做:

gmdate('Y-m-d H:i:s', time() + 3600 * $h); 

其中$h是在小時UTC的偏移量(以美國爲負數),或者,如果偏移量是不是一個完整的小時數:

gmdate('Y-m-d H:i:s', time() + 60 * $m); 

其中$m是以UTC爲單位的分鐘偏移量(例如,印度標準時間IST爲330)。雖然有一個添加了時區偏移的Unix時間戳本身沒有任何意義!

最後但並非最不重要的一點,不要忘記通過網絡時間協議NTP來同步您的系統。

1

PHP在Windows下如何獲取忽略時區的當前系統時間? 我有下一個問題。我有幾個PHP系統運行在不同的Windows機器上。這些系統密集使用當前時間。

相關問題