@snitko - 你的答案對我來說很長一段時間偉大的工作。然而,正如@Giovanni指出的那樣,它在某些情況下沒有考慮夏令時,因爲它會在給定分鐘偏移量的情況下提供第一個可用時區。我找到了一個解釋DST的簡單工作答案。
這裏頭 - http://site.pageloom.com/automatic-timezone-detection-with-javascript,它是一個javascript時區檢測器。您只需將從網站鏈接的JavaScript代碼(或正確的here)複製到您應用程序的一個JavaScript文件(application.js工作正常)。它允許您通過名爲jstz
的對象檢索時區。
然後,在application.html.erb我
<script type="text/javascript">
var timezone = jstz.determine();
document.cookie = 'time_zone='+timezone.name()+';';
</script>
而在application_controller.rb,我有
before_filter :set_timezone
private
def set_timezone
Time.zone = cookies["time_zone"]
end
這就是你所需要的!時區已爲您的Rails應用程序正確設置。
編輯:這可能需要將javascript cookie設置代碼放在application.html.erb中的<\body>
標籤後面,因爲JavaScript文件加載的方式和順序不同。
不,我不需要將其存儲在用戶模型中。 無論如何,你的current_user.time_zone看起來像什麼?它是一個字符串? – snitko 2009-06-03 02:26:15
是的,只是使用時區內建的Rails,所以對於我的用戶在應用程序中它只是「悉尼」 – nitecoder 2009-06-03 04:00:01
通常,在模型(MVC的M部分)中訪問類似會話和cookie的對象不是一種好的做法 – yek 2011-05-01 21:40:35