【Rails】日時フォーマット(lメソッド)

はじめに

Viewにcreated_atのような日付を出力すると、

Tue, 30 Jul 2020 00:12:12 +0000

のような日本人には見慣れない表示がされます。この記事ではこれを日本人が見やすい表示に変更する流れを紹介します。

タイムゾーンを日本時間にする

まず、タイムゾーンを日本時間にしましょう。

config/application.rb

module Normal
  class Application < Rails::Application
    # Initialize configuration defaults for originally generated Rails version.
    config.load_defaults 5.2

    # アプリケーション側のタイムゾーン
    config.time_zone = 'Tokyo'
    # DB側から受け取った時刻をどのタイムゾーンとして解釈するか
    config.active_record.default_timezone = :local  
  end
end

これで画面に表示される日時が日本時間になります。

Tue, 30 Jul 2020 09:12:12 +0900

日本人が読みやすいフォーマットにする

lメソッドをしようするのですが、そのまえに準備をします。 先ほどのapplication.rbに以下を追記します。

# デフォルトの言語を日本語に変更
    # デフォルトは:enになっている
    config.i18n.default_locale = :ja
    # localeファイルの読み込み設定
    config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')]

続いて、 config/locales/ja.ymlというファイルを作成し、以下の記述をします。

ja:
  time:
    formats:
      default: "%Y/%m/%d %H:%M:%S"

これで準備OKです。 View側で

<%= l user.created_at %>

と記述してみましょう。

2020/11/30 09:12:12

とわかりやすい表示になっているはずです。

応用編

他にも、ja.ymlの指定を増やせばいろいろな形のフォーマットを実現できます。

ja.yml

ja:
  time:
    formats:
      default: "%Y/%m/%d %H:%M:%S"
      short: "%m/%d %H:%M"

View側

<%= l user.created_at, format: :short %>
11/30 09:12

このように、フォーマットを作ることができます。

参考文献

Railsガイド 日付・時刻フォーマットを追加する