何かと日付計算は使うと思いますが、「一週間前」をどう出すかについて。
「一週間前」の計算をprev_month
と同じノリでprev_week
を利用して計算した際、意図したものにならず「あれっ?」となることがありました。ので、メモ。
例えば↓のような計算。
> Date.yesterday #=> Sun, 30 Apr 2017 > Date.yesterday.prev_month #=> Thu, 30 Mar 2017 > Date.yesterday.prev_week #=> Mon, 17 Apr 2017
何も気にせずにやっていると、あれ?Date.yesterday.prev_week
は2017年4月23日じゃないの?となります。
が、よくよくソースを見ると処理が全く違うオチ。
prev_week
def prev_week(start_day = Date.beginning_of_week, same_time: false) result = first_hour(weeks_ago(1).beginning_of_week.days_since(days_span(start_day))) same_time ? copy_time_to(result) : result end
rails/calculations.rb at f2c6db41ba56afb1529e4732c59622fc0cf9f3ba · rails/rails · GitHub
prev_month
def prev_month months_ago(1) end
rails/calculations.rb at f2c6db41ba56afb1529e4732c59622fc0cf9f3ba · rails/rails · GitHub
prev_week
の中身はまだ詳しく知りたいのでおいおい。
おとなしく「一週間前」を出そうとすると、こういうことになるのでしょうか。
> Date.yesterday.weeks_ago(1) #=> Sun, 23 Apr 2017 > Date.yesterday - 1.week #=> Sun, 23 Apr 2017