2010-05-23 71 views
4

我基本上想要使用Rails自動檢測用戶的時區。我可以在用戶的​​瀏覽器(http://www.onlineaspect.com/2007/06/08/auto-detect-a-time-zone-with-javascript/)上使用此JS代碼發送帶有UTC偏移量的時間表,以及時區在夏季或夏季期間觀察用戶時區中的夏令時。在給定UTC偏移和DST的Rails中自動檢測時區

一旦我在服務器中有這些信息,我想選擇匹配的時區。在Rails中,我可以通過ActiveSupport :: TimeZone.all獲取時區列表。另外,由於utc_offset方法,我可以通過UTF偏移過濾區域。但是,我不知道如何過濾做/不做DST的時區。

E.g.假設用戶住在阿姆斯特丹。按UTC抵消的過濾將返回柏林,貝爾格拉多,馬德里等時區以及西非中部。除中西部非洲之外,它們都將是阿姆斯特丹用戶的合適時區(因爲它們提供相同的時間/日期),但我需要過濾西非中部非洲,夏季不執行夏令時。

我如何在Rails中做到這一點?另外,我的任何假設都錯了嗎?

回答

1

我想也許http://geokit.rubyforge.org/會有所幫助。您可以獲取用戶位置(或城市/國家)的座標。您唯一需要做的就是猜測基於城市/國家的時區。

+0

事實上,在我的情況下,我甚至有lat&lng的位置,但駁回了這種方法。爲某些給定的lat&lng獲取相關時區並非易事。 Geonames提供了一種獲取lat&lng提供的時區的方法,但提供了與Rails不同的命名方案(因此,我必須通過UTC偏移量來猜測時區,並且在此情況下我沒有關於DST的信息)。 – Jose 2010-05-23 14:28:52

+0

更新:Geonames在響應中提供DST信息。但是,我也遇到了同樣的問題:如何獲得給定DST和UTC偏移量的Rails時區。 – Jose 2010-05-23 15:09:24

+2

我終於解決了!由於並非所有Geonames的時區都包含在Rails中,我已經將缺失的時區映射到考慮UCT偏移和DST的最佳候選人。其中一些無法解決,但是非常罕見。您可以在您的Rails應用程序中包含此初始化程序(http://pastie.org/975171),並享受lat&lng提供的時區檢測功能。 – Jose 2010-05-24 20:58:47

相關問題