2019.12.03

【Rails】ビューで投稿日時から曜日を算出させる方法

スポンサーリンク

投稿日時の曜日の算出について

 

曜日が英語表記になったりしてなかなかうまく表示できませんでしたが、色々調べてうまいこと自分の思い通りの表記にできたので纏めておきます。

リファクタリング余地は多々あると思いますが、それは指摘してもらえると嬉しいです。

↓↓こんな感じで表示させます。

 

日時表示のフォーマットを設定する

最初に日時表示のフォーマットを作成していきます。フォーマットのファイルはconfig/initializers直下にtime_formats.rbを作成します。

config/initializers/time_formats.rb
Time::DATE_FORMATS[:datetime] = '%Y/%m/%d %H:%M' 例: 2019/12/12 12:34
Time::DATE_FORMATS[:datetime] = '%Y年%m月%日 %時:%分' 例: 2019年12月12日 12時34分

フォーマットは好きなようにカスタマイズしてOK

Viewファイルの編集

まずは投稿した日時をフォーマットなしで表示させてみます。

views/images/index.html.rb
<%= image.created_at %>

これだけだと、2019-12-02 23:57:14 +0900 のような表記になります。これだと見た目的に不格好なので、最初に設定したフォーマットを適用させていきたいと思います。

では先ほどのコードに手を加えていきましょう。

views/images/index.html.rb
<%= image.created_at.to_s(:datetime) %>

:datetimeで設定したフォーマットを呼び出しています。to_sはオブジェクトをString型に変換するオブジェクトです。

画面を更新すると表記は 2019/12/02 となっているはずです。自身の設定したフォーマット通りに反映されているか確認してください。

 

日付を付け足す

最初に設定したフォーマット情報を変数dateに格納。

views/images/index.html.rb
<% date = image.created_at.to_s(:datetime) %>

 

次に曜日を日本表記にするため%wで文字列からなる配列を作成します。

views/images/index.html.rb
weekday = %w[日 月 火 水 木 金 土]

 

Dateクラスのparseメソッドで文字列をDateクラスに変換(タイムゾーンは関係しない)

Dateクラスのwdayメソッドで曜日を表示させます。wdayメソッドは曜日を返します (0-6、日曜日は零)とのこと。(リファレンスマニュアル参照)

views/images/index.html.rb
weekday[Date.parse(date).wday]

wdayメソッドの0-6情報を先ほど作った配列から引っ張ってきて日本語表記に変換できるんだと思います。

何はともあれいい感じに表示できたのでよしとしましょう(苦笑)

 

改修できる部分があったら後々リファクタリングして、どこをどう直せばよいのか追々追記したいと思います。また間違ってるよってところがあれば指摘してくださると助かります!