【rails】日付の表記について

※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。

日付を表示する

データベースには、指定したカラム(title、content)の他に自動で作成されるカラムがある

  • id
  • created_at
  • update_at

コードは前回までの続きを編集していく


created_atで投稿日時を表示する

index.html.erbに以下を追記する

  <p><%= article.created_at %></p>

↓ プレビューしてみる

秒数とか「UTC」とか、余計なものが表示されちゃっている


日時表記のdefaultを書き換える

config/locales/ja.ymlを確認する

日時表記のフォーマットが書いてある

  time:
    am: 午前
    formats:
      default: "%Y年%m月%d日(%a) %H時%M分%S秒 %z"
      long: "%Y/%m/%d %H:%M"
      short: "%m/%d %H:%M"
    pm: 午後

初期設定は「default: “%Y年%m月%d日(%a) %H時%M分%S秒 %z”

このdefault以降を書き換えるとよさそう

default: "%Y/%m/%d"

何年/何月/何日という表記がdefaultになる


I18n.l(◯◯.created_at, format: :default)

index.html.erb

index.html.erbに戻って以下のコードを追記する

<p><%= I18n.l(article.created_at, format: :default) %></p>

I18nとは、国際化の意味

I18n は、internationalizationの略です。
internationalizationの先頭の文字i、最後の文字n、その間の文字数が18なので、I18nと略されています。

format: :defaultにすることで、ja.ymlで設定したdefault表記が反映される

【rails】表記の変更(yml)まとめ

show.html.erb

<p><%= I18n.l(@article.created_at, format: :default) %></p>

show.html.erbでは@articleにすること

読みやすくなった!


モデルの中で定義する

もっと簡単に書きたい

app/models/article.rbに以下のコードを追加する

class Article < ApplicationRecord
 # 中略

 def display_created_at
    I18n.l(self.created_at, format: :default)
  end
end

display_created_atのメソッドを定義しておくと、あちこちに書かなくてよくなる

articleArticleクラスのインスタンスなので、クラスで定義しておく

Articleクラスにメソッドを書き足す(拡張する)ことで、controllerやviewで使用できる


index.html.erb

<p><%= article.display_created_at %></p>

show.html.erb

<p><%= @article.display_created_at %></p>

self」の部分は自身を指すので、htmlに書くときは置き換える

#DAY15