2012-03-06 35 views
4

我正在使用Javascript來存儲用戶當前的GMT偏移時區,我想將其轉換爲PHP時區名稱。將時區偏移量轉換爲名稱

如果我有一個說「300」或「-200」的偏移量,我該如何將它轉換爲php時區名稱?

謝謝!

回答

2

根據定義是不可能的。

幾個時區可能具有相同的偏移量(並且它也取決於一年的時間)

+0

啊哈。那麼你能推薦跟蹤用戶時區首選項的最佳方法嗎? – ackerchez 2012-03-06 20:56:48

+0

@ackerchez:你可能可以在配置文件設置中獲得選擇,最常用的時區名稱(如大多數論壇引擎) – zerkms 2012-03-06 21:02:38

+0

最好的猜測可能是基於猜測的位置(基於ip或許) – Evert 2012-03-06 21:05:21

4

不幸的是,我遇到了你的問題剛纔來了,所以答案似乎晚了一點,但無論如何,我發佈它。

您絕對可以將時間偏移量轉換爲時區名稱。基本上,這是通過下面的行的代碼進行:

$zoneName = timezone_name_from_abbr('', $offset*3600); 

其中$offset是時間(小時)的偏移。由於PHP中的一些已知錯誤/功能,這種簡化的方法在某些情況下可能會失敗,因此可以在php.net網站上找到解決方法的擴展包裝。除此之外,包裝還支持夏令時標誌。

事實上,正如@zerkms在他的回答中指出的那樣,時間偏移和時區名稱之間沒有一一對應的關係,因爲幾個時區通常共享相同的偏移量。 該函數返回與給定偏移量對應的第一個找到的時區。第一個確切的是未預定義的。

但無論如何,此功能通過date_default_timezone_set設置用戶會話的首選時區非常方便,該接口僅接受時區標識符,但用戶可能會在Web UI中顯示時間偏移。只要我們知道時間偏移是正確的,我們就不關心使用哪個標識符(幕後)。

+1

請發佈評論,同時downvoting。沒有它,人們可能會認爲你不瞭解某些東西。 – Stan 2014-09-26 10:28:44

+0

+1包裝 – Samin 2014-11-09 18:07:06

+0

這不考慮夏令時,是嗎? – BadCash 2015-09-29 10:13:07