LoginSignup
6
3

More than 3 years have passed since last update.

Railsで日時を日本語表記に変更

Posted at

はじめに

テーブルのカラム created_at を使えば、データを作成した日時を取り出せます。
ところが、そのままの表記では使いづらいです。

今回は、 2020/7/21 9:05:50 の様な表記で取り出せるようにしたいと思います。

作成日時を表示する

まず posts テーブルのデータ @postcreated_at をそのまま取り出してみましょう。

posts/show.html.erb
<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点が異なります。

  1. UTC (世界標準時) になっている
  2. / のところが - になっている
  3. の表記が 07 になっている

順番に修正していきたいと思います。

1.世界標準時から日本時間に変更する

プログラミングは世界中で使われている為、そのままだと 世界標準時 で出力されてしまいます。
その為、日本時間 に変更しましょう。

config/application.rb
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 をインストールし、日本語に設定します。

Gemfile
# Rails6 の場合
gem 'rails-i18n', '~> 6.0'
# Rails5 の場合
gem 'rails-i18n', '~> 5.1'
ターミナル
bundle install
config/application.rb
class Application < Rails::Application
  # 略
  config.time_zone = "Asia/Tokyo"
  # ***** 次の1行を追加 *****
  config.i18n.default_locale = :ja
end

次に、 rails-i18n に用意されている lメソッドを使用します。

posts/show.html.erb
<p>イベント: <%= @post.event %></p>
<p>場所: <%= @post.place %></p>
<!-- ***** l を追加 ***** -->
<p>作成日時: <%= l @post.created_at %></p>

さらに、config/locales/ja.ymlというファイルを作成し、フォーマットを設定しましょう。

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 を省くことで対応出来ます。

config/locales/ja.yml
      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 を削りましょう。

config/locales/ja.yml
ja:
  time:
    formats:
      # ***** %の後ろに-を追加 *****
      default: "%Y/%-m/%-d %-H:%M:%S"
place event created_at
東京 花火大会 2020/7/21 9:05:50

-を入れることで以上の様に、0埋め をなくすことが出来ました。

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3