2012/12/05

[Rails] 日付データの取り扱い:DB保存のタイムゾーンと、表示時のタイムゾーンを別にしたい時

DB保存はUTCで、画面表示時はそれぞれのタイムゾーンで(例えばJSTで)とか

Rails3 だと config/application.rb で 保存するタイムゾーンと 画面表示時に使うタイムゾーンを分けて設定できる

↓保存時のタイムゾーン

config.active_record.default_timezone = :local
※設定しない場合は default='utc'


↓表示時のタイムゾーン


config.time_zone = 'Tokyo' 
※Controllerで ユーザのタイムゾーンを↑切り替えれば 指定のタイムゾーンで表示される(はず)



ただし、↑この便利な設定の恩恵にあずかるには、保存する 日付フィールドを ただのTimeで保存してはダメ
ActiveSupport::TimeWithZoneクラスにする必要がある


start_at = Time.parse("入力された日付")
↑とかだと Timeクラスになっってしまう(コンソールとかで確認できる)


start_at = Time.zone.parse("入力された日付")
↑常に Time.zone を使うようにしないとダメ



参考)
Rails3系のtimezoneの扱いに関するメモ #Rails - Qiita http://qiita.com/items/68341489a9c5149b815d

[Rials3]Rails3 + ActiveRecord で正しくtimezoneを設定する - Future Journal ~未来志向で行こう~ http://d.hatena.ne.jp/twodollarz/20120703
















0 件のコメント: