Ruby on Railsのtimezoneをtokyoに変更し、ついでにいい感じに時刻をビューに出力する
DBからデータを取得し、オートインクリメントであるcreated_atをビュー側に出した時の話。
先日設定したSQLite Managerでdb:seedした時間が全然違うなぁ・・なんかUTCとかつくしなぁ、、と思って見ていたら、
このサイトで全てが解決した。
railsの仕様上、全て日本時間-9時間の時刻でDBに入る他、そのままビューに出すとUTC付きで出力されるというのだ。
こらあかん、ってことで早速対策を。
まずはconfig/application.rb に
config.time_zone = 'Asia/Tokyo'
を追加。(※ruby5以降ではenvironment.rbではなくapplication.rbに記述となるので注意)
これをもって、ビュー側で
<%= @test[:created_at] %>
と出すと、日本時間のcreated_atの時間+0900
という表記に・・。この0900も邪魔なのでstrftime関数で除外。
<%= @test[:created_at].strftime("%Y-%m-%d%H:%M") %>
これにて一件落着、だったんだけど、
いちいちこうやるのはめんどくさいし、サムい。
ってことで引き続き上記のサイトに習ってアプリケーションヘルパーに
simple_timeメソッドを定義することに。
/app/helpers/application_helper.rb
def simple_time(time)
time.strftime("%Y-%m-%d %H:%M ")
end
ちょっとスペースをあけてるのは、このまま出力すると全部くっついちゃって見づらいから。
てことで、あとはビュー側で、
<%= simple_time(@test[:created_at] ) %>
でOK。
すごい楽になって嬉しい。