我今年參加了Rails Rumble,我發現自己被時區問題糾纏在一起。Rails 3.2.8 - 如何處理時區?
我上傳了我的應用程序在林德,我住在美國東部時區或-4到UTC。
我有一個模型,它通過執行以下操作保存的東西:
def self.processing_creation(user_id, home_id, chore_id)
registered_chore = RegisteredChore.where("DATE(created_at) = ?", Date.today).find_by_user_id_and_home_id_and_chore_id(user_id, home_id, chore_id)
unless registered_chore
registered_chore = RegisteredChore.create(user_id: user_id, home_id: home_id, chore_id: chore_id, created_at: Time.zone.now)
user = registered_chore.user
user.add_one_chore_point
end
registered_chore
end
RegisteredChore.where( 「?DATE(created_at)=」,Date.today).find_by_user_id_and_home_id_and_chore_id(USER_ID,HOME_ID,chore_id)
即使數據剛剛創建,也會返回false。
我注意到「創建」以UTC保存,但Date.today使用用戶的本地時區。
處理這個問題的最佳方法是什麼?
另一個例子來說明這個問題:
- 我想在美國東部時間11點註冊一個苦差事。
- 服務器已在第二天(例如:12)。
- Rails在第二天的日期保存數據(12)。
- 但是用戶仍然在第11天。
- 從技術上說,用戶使用當前方法可以再次保存條目,因爲日期與數據庫和用戶界面不同。
如何解決這個問題?