感情的ドリル

Ruby県でRuby書いてるドルオタ

Time#to_sのフォーマット

よく使うフォーマットを定義する

アプリケーション内で Time.new.to_s したときのフォーマットを指定できる。 対象としては、TimeクラスとDateクラス。   created_at.strftime('%Y/%m/%d %H:%M')みたいなヘルパを大量に定義している場合、まとめて定義してしまったほうがいい。   定義したら、READMEなりナレッジなりに明記して周知すること。  

 

定義先

config/initializers/time_formats.rbなどに定義するとよさそう。 余談だけど、Rails5からconfig/application.rbにごちゃごちゃ書くのは非推奨になったので、アプリケーションに関連する定義は config/initializers/*.rbに切り出すのが良い。

定義例

 

# date = Time.local(2009,12,24,15,30,27)

Time::DATE_FORMATS[:default] = '%Y/%m/%d %H:%M' # "2009/12/24 15:30" 
Time::DATE_FORMATS[:datetime] = "%H:%M %d-%b-%Y" # date.to_s(:datetime) ----> 15:30 24-Dec-2009
Time::DATE_FORMATS[:date] = "%d-%b-%Y" # date.to_s(:date) ----> 24-Dec-2009
Time::DATE_FORMATS[:time] = "%H:%M" # date.to_s(:time) ----> 15:30
Time::DATE_FORMATS[:google] = "%Y-%m-%d %H:%M:%S" # date.to_s(:google) ----> 2009-12-24 15:30:27

# In rails, output of a date field uses Date::DATE_FORMATS[:default]
Date::DATE_FORMATS[:default] = Time::DATE_FORMATS[:date]

# To display the current date and time in all the formats in your current environment:
Time::DATE_FORMATS.keys.each{|k| puts [k,Date.today.to_s(k)].join(':- ')}
Time::DATE_FORMATS.keys.each{|k| puts [k,Time.now.to_s(k)].join(':- ')}

# date.to_s(:date) #=> "2018年4月1日(日)"
Time::DATE_FORMATS[:date] = ->(t) {
t.strftime("%Y年%-m月%-d日(#{%w(日 月 火 水 木 金 土)[t.wday]}")
}

 

参考

[日付/時間フォーマットのデフォルトを設定] (https://qiita.com/Vit-Symty/items/399c77d1fd681b77d593)

reggieb/time_formats.rb