読者です 読者をやめる 読者になる 読者になる

おれんじりりぃぶろぐ

きっと何者にもなれないエンジニアのブログ

Railsでの時間表示を変更したい

Railsではモデル作成時にcreated_atやupdated_atカラムを勝手に作ってくれるし
データの作成、更新時にも作成日時を自動的に挿入してくれるという大変便利な仕様なのに
例えば以下のように日時表示させても

<%= @user.created_at %>

f:id:orange_lily27:20150711001959p:plain

↑デフォルトではこんな感じの表示になってしまう。残念。
というわけで日時表示をカスタマイズしてみた。

方法

1つの方法としてはDateやTimeオブジェクトの後にstrftimeをつければよい。

@user.created_at.strftime("%Y年%m月%d日 %H時%M分")

こんな感じの表示になりました↓
f:id:orange_lily27:20150711003443p:plain

ただ、毎回strtimeをつけてフォーマットを指定してあげるのも面倒なので
プロジェクト全体への設定を行う。

/config/initializers/time_formats.rbを作成し、以下を記述する。

# カスタムフォーマットを定義
Time::DATE_FORMATS[:default] = "%Y年%m月%d日 %H時%M分"
Date::DATE_FORMATS[:default] = "%Y年%m月d日"

rails sを再起動させconfigを読み込ませると以下のような表示になる↓

f:id:orange_lily27:20150711003443p:plain

time_formats.rb:default以外のシンボルを設定することもできる。

Time::DATE_FORMATS[:twelve_hour] = "%Y年%m月%d日 %p%I時%M分"

view側での表示は先ほど設定したシンボルを指定すればよい。

@user.created_at.to_s(:twelve_hour)

f:id:orange_lily27:20150712102330p:plain

おまけ

フォーマット一覧

フォーマット 出力
%A 曜日(Sunday etc...)
%a 曜日略称(Sun etc...)
%B 月(January etc...)
%b 月略称(Jan etc...)
%c 日付と時刻
%d 日(01 - 31)
%H 24時間制の時間(01 - 24)
%I 12時間制の時間(01 - 12)
%j 年間の通算日(001 - 366)
%M 分(00 - 59)
%m 月(01 -12)
%p 午前・午後(AM/PM)
%S 秒(0 - 60)
%Y 西暦(2015)
%y 西暦下二桁(15)
%Z タイムゾーン

参考