Rails

日付/時刻を日本時間で表示させる方法(タイムゾーンの変更/相対時間の表記)

1+

今回は、日付/時刻を日本時間で表示させる方法について簡単にまとめてみました。
実装例としてコメント機能の実装に際して、コメントの投稿日時を表示させるという目的のもと、まとめていきたいと思います。

まずは、コメントが投稿されたときの現在の表示画面とHTMLは下記のようになっています。

時刻表示はUTCとなっており、日本時間でもないので、とても見にくいです。
そこで、まずは、UTCから日本時間に変更を加えていきます。

手順①config/application.rbに設定を追加する。

これでタイムゾーンがUTCから東京に変わります。

これでもまだ、UTCから換算した時差(+0900)の表示が残っているので、
これも消してしまいましょう。

手順②config/initializersにtime_formats.rbを作成する

このconfig/initializers/以下にあるファイルは、設定ファイルとしてRailsを起動した時に自動的に読み込まれるファイル。なので、このファイルを読み込もうと思ったら、Railsを再起動して作成したファイルを読み込ませる必要があります。これはrails newでアプリケーションを作成した際に、初期ファイルとしてcongfig/initializers/以下に生成されたファイルにコメントアウトでちゃんと書かれています。

手順③time_formats.rbに日時の表示フォーマットを設定する

これで日時は右記のようなフォーマットになります。(2019-03-20 21:00)

手順④HTMLにtime_formats.rbに設定したフォーマットを適用する。

手順③で作成したのは、あくまで出力フォーマットなので、実際にHTMLに記述し、適用させます。

comment.created_atをto_sメソッドを使って、指定フォーマット(:datetime)のString型に変換しています。

これで、日時が見やすい形になりました。

フォントサイズも調整すれば、コメントの内容を邪魔しないデザインに変えることも簡単にできます

番外編:現在時刻を基準とした相対時間を表示する

twitter等で、よく見る時間表示で「1時間前」「1分前」といった相対時間を表示しているサービスもよく見かけるので、相対時間の表示方法も試してみました。

手順①helpers/application.helper.rbでヘルパーメソッドを作成する

ここでは、Railsに搭載されているtime_ago_in_wordsと呼ばれる関数を使います。
これ関数単体でも使えるので、下記のように直接HTMLに記述することも可能です。

ただ、ViewのHTMLファイルに毎回同じ記述を書くのは長いし、面倒なのでヘルパーメソッドを作成して、再利用しやすい形にしています。

手順②相対時間を日本語表記に変える。

先程と同様、config/application.rbに設定を追加します

 

ただ、このままだとエラーメッセージの時と同様で、一部分が英単語の表記になってしまうので、config/locales/にja.ymlという日本語訳のためのファイルを作成します。

手順③ja.ymlに日本語訳を設定する。

これで、日本語表示が可能になった。あとは、ヘルパーメソッドをHTMLに適用するだけです。

手順④HTMLでヘルパーメソッドを呼び出し、相対時間を適用する。

これで、下記のような相対時間を表示させることができます。

通常の時刻表示よりもちょっとオシャレになりました!

 

1+