2012-01-12 66 views
1

我目前正在使用它來將時間戳轉換爲用戶定義的時區。我的問題是DateTimeZone()需要像Europe/ViennaAmerica/Chicago一個時區:轉換DateTimeZone的GMT值?

$date = new DateTime("@".$timestamp); 
$date->setTimezone(new DateTimeZone("America/Chicago")); 

我已經看過成支持時區上http://us3.php.net/manual/en/timezones.php但有這麼多的人,我不希望用戶瀏覽整個列表。

是否有一種簡單的方法來轉換GMT+1:00,GMT-4:30或爲DateTimeZone()的正確值。

還是像我在這裏找到它更好地使用數組列表:Convert selected time and timezone to a set timezone

是它更好地使用UTC或GMT一般用戶挑選?

謝謝!

+1

基於GMT-offset的值不明確。給定的偏移量通常映射到幾個時區。當他們的夏令時邊界被越過時,給定的偏移可能會變得不正確。 – salathe 2012-01-12 11:59:10

回答

1

您應該可能獲得用戶的真實時區(從完整列表中選擇)。僅使用來自UTC的靜態偏移量,您將無法遵循用戶位置的正確夏令時規則。

PHP的DateTimeZone似乎不接受POSIX timezone strings,所以它看起來像你卡在預定義的時區。

查看/usr/share/zoneinfo/Etc。有一堆預定義的時區用於UTC加減整數。唯一的問題是+和 - 的意義與正常慣例相反。因此,只需使用「Etc/GMT-9」作爲偏移+0900的通用時區即可。

這不能處理所有可能的時區,比如尼泊爾奇怪的+0545,但它看起來像是最容易獲取的最佳選擇。

1

我不認爲有另一種方式來傳遞時區。我認爲PHP中使用的時區必須是基於位置的,以確定DST設置和偏移量。

但是,您仍然可以向用戶展示GMT+1:00等選項。你可以縮小列表的範圍,只使用太多的選項(UTC,GMT,PST等)。