Rubyで時刻をお好きな書式に従って文字列に変換するときはstrftimeを使う。

こんな感じ

time = Time.new(2022, 12, 18, 10, 11, 12)
time.strftime('%Y-%m-%d') # 2022-12-18 と出る

ただ、このstrftimeをいろんなところで使うと、時刻の表示形式を変えたい、なんてときに面倒くさいことになる。

で、railsならconfig/locales/ja.ymlとかにフォーマットを書いておくとそれをlメソッドで呼び出して使うことができる。

これなら、書式変える時も一箇所変えれば全て変わるので楽だ。

以下のように、お好きなformats:を設定しておく。short:でもいいし、long:とかdash:とか好きな言葉でいいと思う。

ja:
  date:
    formats:
      short: '%m/%d'

これであとはviewの中だったらこんなふうにlメソッドを呼び出せばOK

format:のところにymlで設定したシンボルを指定してあげる。ここを取り換えれば複数のフォーマットを出し分けもできる。

<%= l model.created_at, format: :short %>

やっとこの記事の本題です。

viewファイル以外でこのlメソッドを呼び出したいときは、頭にI18n.をつけてあげればOK

すばらしい。

class MyClass
  def date_text
    I18n.l Date.current, format: :short
  end
end
m = MyClass.new
puts m.date_text # 12/3 みたいに表示される

最初、include ActionView::Helpers::TranslationHelperをクラスに書いていたのだけど普通にI18nをつけるだけでよかった。

lメソッドについてのもっと詳しい解説はこちらで書かれています。

【初心者向け・動画付き】Railsで日時をフォーマットするときはstrftimeよりも、lメソッドを使おう

この記事の環境情報

  • Ruby 3.1.2
  • rails 7.0.4