先週月曜日の日付を取得するアルゴリズム

先週の月曜日を求めるアルゴリズム

  • 先週(7日前)が月曜日である場合はその日付を返す
  • 月曜日でない場合
    • 月曜日より前であれば日付を1日たす
    • 月曜日より後であれば日付を1日ひく

Rubyで実装

1
2
3
4
5
6
7
8
9
def last_monday(date = Date.today - 7)
return date if date.monday?
if date.wday < 1
date += 1
else
date -= 1
end
last_monday(date)
end

先週の金曜日を求める場合

1
2
3
4
5
6
7
8
9
def last_friday(date = Date.today - 7)
return date if date.friday?
if date.wday < 5
date += 1
else
date -= 1
end
last_friday(date)
end

次の月曜日の日付を求めるアルゴリズム

  • 明日が月曜日かどうか
    • 月曜日であればその日を返す
    • 月曜日でなければ1日たす

Rubyで実装

1
2
3
4
def next_monday(date = Date.today + 1)
return date if date.monday?
next_monday(date + 1)
end

前回の月曜日の日付を求めるアルゴリズム

  • 昨日が月曜日かどうか
    • 月曜日であればその日を返す
    • 月曜日でなければ1日ひく

Rubyで実装

1
2
3
4
def prev_monday(date = Date.today - 1)
return date if date.monday?
prev_monday(date - 1)
end

実行結果

1
2
3
4
5
6
7
8
9
10
puts Date.today.strftime("%Y-%m-%d (%a)")
=> 2016-06-09 (Thu)
puts prev_monday.strftime("%Y-%m-%d (%a)")
=> 2016-06-06 (Mon)
puts next_monday.strftime("%Y-%m-%d (%a)")
=> 2016-06-13 (Mon)
puts last_monday.strftime("%Y-%m-%d (%a)")
=> 2016-05-30 (Mon)
puts last_friday.strftime("%Y-%m-%d (%a)")
=> 2016-06-03 (Fri)