【Rails3】時刻比較の注意点
Railsでは、「データベースには時刻を標準時で格納しておき、
表示する際には指定したタイムゾーンで表示する」
という考え方を採用しています。ですので、時間を管理する際は、タイムゾーンを意識しなくてはなりません。
といっても、普段はモデルクラスさんが頑張って変換してくれているので、あんまり意識しなくてよいです。
タイムゾーンのセットは、
config/application.rb config.time_zone = 'Tokyo'
で東京にセットされます。
そして、時刻データの格納時:
modelInstance.time_at = Time.now.to_s(:db)
とかしておけば、
DBデータ格納時に、UTC(世界標準時)/フォーマットは"YYYY-MM-DD hh:mm:ss"
という形式でDBにデータが格納されます。
Viewでの表示時は:
modelInstance.time_at.strftime('%Y/%m/%d %H:%M')
とすることで設定したタイムゾーン(東京だったら+9時間)の時刻で表示してくれます。
ただし気を付けて。
「Viewで表示するときは、何も考えなくてもタイムゾーン合わせてくれる(´ω`)」
っていう理解は間違いです!m9(’A`#)(←やつれてる
modelInstance.created_at.strftime('%Y/%m/%d') #タイムゾーンで指定した時刻が取れる modelInstance.created_at.to_s(:db) #UTCの時刻が取れる(!!!!) Time.now.to_s(:db) #タイムゾーンで指定した時刻が取れる
ということで、
・ViewでもメソッドによってはDBに格納された値が取れるということ。
・同じメソッド(.to_s(:db))でも、Time.nowとモデルのインスタンスではタイムゾーンが異なること。
は覚えておいて損はないです。時刻比較の時などにハマることがあるので気をつけてください!(やつれ声
参考URL : Rails の Date, Time 拡張
http://d.hatena.ne.jp/spitfire_tree/20080223/1203760297