
【Rails】使いやすい日付の表示方法5選
はじめに
この記事の概要
こんにちは、株式会社TOKOSのたくまです!
Railsアプリ作成時に下記のような日付を指定してデータを取得したり、表示させたいと思うことはありませんか?
- 月初から月末にかけてのデータが欲しい。
- 過去の日付を入力させないようにする。
- 特定の曜日の日付を知りたい。
- ...etc
今回は上記の例の他にも使いやすい日付表示方法についてまとめました!
対象読者
- Rails初学者の方
- Railsにおける日付表示方法を知りたい方
日時を扱う基本的なクラスなどにてついては、以下の記事が参考になります。
【Ruby】Date、Time、Datetimeクラスの基本 - Qiita
日時、時間を扱える。Datetimeは両方、Dateは日付、Timeは時間を管理。 うるう年、1ヶ月ごとの日数、曜日などの管理も可能。 Rails独自の便利なメソッドも用意されてる。より可読性、安全性の高い。 Date クラス(日付) 日付を扱うクラス。 requ...
qiita.com日付表示方法
月初から月末にかけてのデータを表示
月初から月末にかけてのデータを表示する方法です!
まず、月初と月末をそれぞれ表示するにはbeginning_of_monthとend_of_monthを使用します。
また、現在時刻を表示するためにTime.zone.nowを使用します。
@beginning_of_month = Time.zone.now.beginning_of_month
@end_of_month = Time.zone.now.end_of_monthこれで、今月の月初と月末の日にちをそれぞれ取得できました。
ここから月初から月末にかけてのデータを表示するように記述します。
Rubyの記法で範囲を示すには..を使用します。なので、月初と月末を..で繋げることで月初から月末にかけてのデータを取得できます。
@beginning_of_month = Time.zone.now.beginning_of_month
@end_of_month = Time.zone.now.end_of_month
@beginning_end_month = @beginning_of_month..@end_of_monthしっかり12月1日から12月31日までの範囲を取得することが出来ました!
あとは下記のように絞り込みたいモデルにwhereなどを付けることで、この範囲でのデータ抽出が可能になります。
User.where(created_at: @beginning_of_month..@end_of_month)特定の日時より前のデータをすべて取得する
ある日時より前に作成したデータをすべて取得したい場合の記述方法です!
この場合は、Model.where("created_at <= ?", 日付)のように記述します。
例えば、月末より前のデータを表示したい場合は下記のように記述します。
@end_of_month = Time.zone.now.end_of_month
Model.where("created_at <= ?", @end_of_month)上記の例はUserモデルで表示しました。
今月末より前に作成されたデータがすべて取得されます。
過去の日付を入力させないようにする
date_fieldなどを使用して日付を入力するフォームで、過去の日付を入力させないようにする際の指定方法です!
この場合はmin: Time.zone.nowを使用します。
<%= f.date_field :start_date, min: Time.zone.now, class: "h-12 rounded-[3px] text-[#333333] font-bold invalid:text-line-200" %>上記のように記述することで、今日(2022年12月11日)より過去の日付を入力できないように制限しています。
なお、min: Time.zone.nowの部分ですが、明日以降の日付を入力させたい場合などはmin: Time.zone.tomorrowと記述することで指定したい範囲を変更することが可能です。
先週・来週の特定の曜日の日付を表示する
先週の金曜日や来週の日曜日など、特定の曜日の日付を表示する際の方法です!
まず、先週の特定の曜日の日付を取得するにはprev_week(:曜日)を使用します。
(:曜日)部分に表示したい曜日を指定します。
Time.zone.today.prev_week(:sunday)次に来週の曜日の日付を表示するには、next_week(:曜日)を使用します。
Time.zone.today.next_week(:sunday)フォーマットを変換する
2022,12,11のように入力した日付を2022-12-11のように変換するには、strftimeを使用します。
Time.new(2022,12,11).strftime("%Y-%m-%d")今回はハイフンで区切りましたが、スラッシュで区切るなど、自分の表示させたいように変更することが可能です。
おわりに
今回はRailsにおける日付指定・操作5選を紹介しました!
バリエーション豊富で、なおかつ記述も簡単なものが多いので使いやすいなと感じました。
フォーマットの変換は実際に使用する機会も多いと思います。
この他にもまだまだあるので、気になった方はぜひ調べてみてください!


