はじめに
テーブルのカラム created_at を使えば、データを作成した日時を取り出せます。
ところが、そのままの表記では使いづらいです。
今回は、 2020/7/21 9:05:50 の様な表記で取り出せるようにしたいと思います。
作成日時を表示する
まず posts テーブルのデータ @post の created_at をそのまま取り出してみましょう。
<p>イベント: <%= @post.event %></p>
<p>場所: <%= @post.place %></p>
<p>作成日時: <%= @post.created_at %></p>
| place | event | created_at |
|---|---|---|
| 東京 | 花火大会 | 2020-07-21 00:05:50 UTC |
目標としている 2020/7/21 9:05:50 の表記と大いに違うことが分かると思います。
具体的には以下の3点が異なります。
-
UTC(世界標準時) になっている -
/のところが-になっている -
7の表記が07になっている
順番に修正していきたいと思います。
1.世界標準時から日本時間に変更する
プログラミングは世界中で使われている為、そのままだと 世界標準時 で出力されてしまいます。
その為、日本時間 に変更しましょう。
class Application < Rails::Application
# ***** 次の1行を追加 *****
config.time_zone = "Asia/Tokyo"
end
この1行を入れることで以下のように、世界標準時 を 日本時間 に変更することができました。
| place | event | created_at |
|---|---|---|
| 東京 | 花火大会 | 2020-07-21 09:05:50 +0900 |
+0900 がついていますが、これは、日本時間と世界標準時との時差が+9時間であることを表しています。
2.フォーマットを変更する
日本時間にはなりましたが、フォーマットが 2020-07-21 09:05:50 +0900 では分かりにくいです。変更していきましょう。
まず、多言語に対応する為の gem をインストールし、日本語に設定します。
# Rails6 の場合
gem 'rails-i18n', '~> 6.0'
# Rails5 の場合
gem 'rails-i18n', '~> 5.1'
bundle install
class Application < Rails::Application
# 略
config.time_zone = "Asia/Tokyo"
# ***** 次の1行を追加 *****
config.i18n.default_locale = :ja
end
次に、 rails-i18n に用意されている lメソッドを使用します。
<p>イベント: <%= @post.event %></p>
<p>場所: <%= @post.place %></p>
<!-- ***** l を追加 ***** -->
<p>作成日時: <%= l @post.created_at %></p>
さらに、config/locales/ja.ymlというファイルを作成し、フォーマットを設定しましょう。
ja:
time:
formats:
default: "%Y/%m/%d %H:%M:%S"
これにより、表記が以下のように変わり、+0900も消えます。
| place | event | created_at |
|---|---|---|
| 東京 | 花火大会 | 2020/07/21 09:05:50 |
フォーマットは自由に変更することができ、例えば、 秒 が不要なら :%S を省くことで対応出来ます。
default: "%Y/%m/%d %H:%M"
| place | event | created_at |
|---|---|---|
| 東京 | 花火大会 | 2020/07/21 09:05 |
| 記号 | 意味 |
|---|---|
| %Y | 年(YEAR) |
| %m | 月(MONTH) |
| %d | 日(DAY) |
| %H | 時(HOUR) |
| %M | 分(MINUTE) |
| %S | 秒(SECOND) |
[参考ページ] Ruby 2.7.0 リファレンスマニュアル(strftime)
3.ゼロ(0)埋めをなくす
例えば、 7月 が 07 と表記されるのは不自然なので 0 を削りましょう。
ja:
time:
formats:
# ***** %の後ろに-を追加 *****
default: "%Y/%-m/%-d %-H:%M:%S"
| place | event | created_at |
|---|---|---|
| 東京 | 花火大会 | 2020/7/21 9:05:50 |
-を入れることで以上の様に、0埋め をなくすことが出来ました。