動かざることバグの如し

近づきたいよ 君の理想に

Railsで表示する日付のフォーマットを変える

2019年2月15日追記

釘を差された

要はデフォルトをいじるな、と。確かに「なるほど」以上の感想が出なかったので

Time::DATE_FORMATS[:custom] = '%Y/%m/%d %A'
Time.zone.now.to_s(:custom) # => "2006/01/02 Monday"

のように独自フォーマットを作って生成したほうがよい。

普通だと

p = post.published_on.strftime("%Y年%m月%d日 %H時%M分") 

だがあのRailsたんはやっぱり一味違かった

Railsのレールに乗ったやり方

config/initializers/time_formats.rbを新規作成し以下を追加

Time::DATE_FORMATS[:default] = '%Y/%m/%d %H:%M'
Time::DATE_FORMATS[:datetime] = '%Y/%m/%d %H:%M'
Time::DATE_FORMATS[:date] = '%Y/%m/%d'
Time::DATE_FORMATS[:time] = '%H:%M:%S'
Date::DATE_FORMATS[:default] = '%Y/%m/%d'

Railsを再起動する

設定変更前(デフォルト)

2.2.1 :001 > Time.now.to_s
 => "2015-10-21 13:09:56 +0900" 

変更後

2.2.1 :001 > Time.now.to_s
 => "2015/10/21 13:10" 

ビューにも使える

p = post.to_s(:date)

ちゃんと2017/12/08と表示されるはず

フォーマットはstrftime()と同じ