Railsで今週の○曜日を取得したいと思いググったものの、週末を取得して日付を減算するといったレガシーなコードを多々見掛けて、シンプルに取得できないのかと思った。
Railsで先週の金曜日、来週の金曜日といった先週(prev_week)来週(next_week)の日付を取得する便利メソッドがあるのに、今週の金曜日の日付を取得したい時は泥臭いことをしないといけないのが納得出来ないんですけど...
— hotuta (@hotu_ta) October 2, 2018
Railsのソースコードを読んでいたところ、今週の終わりの日付を取得するメソッド end_of_week の引数に曜日をセットすることが出来るような気がしたが...
と思ったら、end_of_week(:friday)で今週の金曜日の日付が取得できるじゃん!
— hotuta (@hotu_ta) October 2, 2018
fridayを週の始まりとするときのend_of_weekでは(?)
— ア… (@_mzpn) October 2, 2018
あー。end_of_weekの引数は週の始まりの日時のことですねー。勘違いしてました😇
— hotuta (@hotu_ta) October 2, 2018
やりたかったことは、Rails5.2で追加されたDate#next_occurringで出来るみたいです!https://t.co/sRRvRGctNg
今週の○曜日の日付を取得するシンプルな方法
ということで、Rails5.2で今回取得したいのは未来の今週の○曜日の日付であるとすると...
pry(Msr)> Date.today
=> Tue, 02 Oct 2018
# 次の火曜日の日付
pry(Msr)> Date.today.next_occurring(:tuesday)
=> Tue, 09 Oct 2018
# 次の金曜日の日付
pry(Msr)> Date.today.next_occurring(:friday)
=> Fri, 05 Oct 2018
過去の今週の○曜日の日付を取得したければ、
pry(Msr)> Date.today
=> Tue, 02 Oct 2018
# 前の火曜日の日付
pry(Msr)> Date.today.prev_occurring(:tuesday)
=> Tue, 25 Sep 2018
# 前の火曜日の日付
pry(Msr)> Date.today.beginning_of_week(:friday)
=> Fri, 28 Sep 2018
Rails5.2で追加された便利メソッドなので、Rubyのみはもちろん、古いRailsのバージョンでは使えません
参考
曜日を指定すると(現時点から見て)「前回その曜日だった日時」と「次回その曜日になる日時」を返すDate#prev_occurringとDate#next_occurringを追加。 (Pull Request)
https://railsguides.jp/5_2_release_notes.html
Railsで日付を取得する時に役立ちそうなリンク集