2011-04-23 36 views
1

在我的Rails應用程序中,我想將用戶的last_login時間存儲在數據庫中。然後,我想根據當地時間向用戶顯示last_login時間(即,如果用戶現在在加拿大,則應該爲X,如果用戶現在在澳大利亞,則應該爲Y)。如何處理Rails應用程序中的時間差異?

問題1

你會如何建議辦理的時間差?我應該在數據庫中存儲翻譯爲UTC的last_login,並在顯示時再次將其翻譯爲當地時間,或者有更好的方法嗎?

問題2

我怎麼能確定顯示last_login當地時區?

回答

3

我認爲你對於以UTC(或任何服務器時間)存儲last_login_at是正確的。它將默認保存在那個時間。然後,你可以將其轉換爲用戶本地時間:

user.last_login_at.in_time_zone('Eastern Time (US & Canada)') 

在Rails API,您可以找到更多關於timezonestime with zone

要確定用戶時區,可以使用一些GeoIP工具,例如this one(請按照此處的描述)。但這不是100%準確的檢測。要求用戶在註冊時選擇他的時區的最可靠方法。

要收集所有時區,你可以運行:

ActiveSupport::TimeZone.all.map(&:name) 
相關問題