【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