因此,我有一個用PHP編寫的Web應用程序,可以在全球不同的Ubuntu服務器上運行。 一些服務器將被配置爲在當地時間運行,一些將在UTC上運行,這取決於客戶。在PHP中使用系統的時區設置
雖然我可以編輯php.ini文件並設置date.timezone,但手動輸入這樣的數據肯定會在一天內弄錯。
如何讓PHP使用已在系統中定義的時區(tzdata)?
或換句話說:我如何從PHP中的系統中提取(long)時區名稱以在date_default_timezone_set()中使用?
因此,我有一個用PHP編寫的Web應用程序,可以在全球不同的Ubuntu服務器上運行。 一些服務器將被配置爲在當地時間運行,一些將在UTC上運行,這取決於客戶。在PHP中使用系統的時區設置
雖然我可以編輯php.ini文件並設置date.timezone,但手動輸入這樣的數據肯定會在一天內弄錯。
如何讓PHP使用已在系統中定義的時區(tzdata)?
或換句話說:我如何從PHP中的系統中提取(long)時區名稱以在date_default_timezone_set()中使用?
有了幫助,安德烈Knupp給他的回答,我能解決這個問題之一。
echo "Time: " . date("Y-m-d H:i:s") . "<br>\n";
$shortName = exec('date +%Z');
echo "Short timezone:" . $shortName . "<br>";
$longName = timezone_name_from_abbr($shortName);
echo "Long timezone:" . $longName . "<br>";
date_default_timezone_set($longName);
echo "Time: " . date("Y-m-d H:i:s") . "<br>\n";
給出輸出:
Time: 2011-12-23 23:29:45
Short timezone:MYT
Long timezone:Asia/Kuala_Lumpur
Time: 2011-12-24 06:29:45
更新:爲時間段短名稱不是唯一的。例如,在美國和澳大利亞都有一個「EST」,領先的timezone_name_from_abbr有時會選擇我不想要的那個......你可以問日期有多大的偏移量,並且可以用來進一步匹配正確的時區:
$offset = exec('date +%::z');
$off = explode (":", $offset);
$offsetSeconds = $off[0][0] . abs($off[0])*3600 + $off[1]*60 + $off[2];
$longName = @timezone_name_from_abbr($shortName, $offsetSeconds);
感謝您的簡單解決方案。我只需要爲我的用戶提供初始猜測。對於這個應用,系統時間是否成爲默認值並不重要。你的猜測工作得很好。 – ndasusers 2013-04-10 20:26:14
date_default_timezone_get()將不會幫助我,因爲在php.ini中沒有date.timezone設置,我沒有做過date_default_timezone_set()呢。但timezone-name-from-abbr()是缺失的鏈接,謝謝! – Stoffisimo 2011-12-23 22:22:19