私は今年、Rails Rumble に参加しましたが、タイム ゾーンの問題に悩まされていました。
アプリを linode にアップロードし、EST タイム ゾーンまたは -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 はユーザーのローカル タイム ゾーンを使用することに気付きました。
これを処理する最良の方法は何ですか?
問題を説明する別の例:
- EST 時間の午後 11 時に雑用を登録したいです。
- サーバーはすでに翌日 (例: 12) です。
- Rails は翌日の日付 (12) にデータを保存します。
- しかし、ユーザーはまだ 11 日目です。
- 技術的には、現在の方法を使用しているユーザーは、日がデータベースおよびユーザー インターフェイスと異なるため、エントリを再度保存できます。
これを解決するには?