geekday’s diary

超絶初心者のエンジニアがいろいろなプログラミング言語に挑戦してみるブログです。

Ruby on Railsのtimezoneをtokyoに変更し、ついでにいい感じに時刻をビューに出力する

DBからデータを取得し、オートインクリメントであるcreated_atをビュー側に出した時の話。

先日設定したSQLite Managerでdb:seedした時間が全然違うなぁ・・なんかUTCとかつくしなぁ、、と思って見ていたら、

 

d.hatena.ne.jp

このサイトで全てが解決した。

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。

すごい楽になって嬉しい。