はじめに
テーブルのカラム 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埋め
をなくすことが出来ました。