はじめに
いろいろググったけど、nの値が固定されている想定のものばかりだったので、nが変動する場合はこれでいいんじゃないかというメモ。
例は3営業日前をだしてみた。
コード
require 'date'
require 'business_time'
require 'holiday_japan'
hiduke = Date.new(2018, 12, 25) # 元になる日付を指定 今日でいいならダイレクトにDate.todayでよし
n = 3 # 回数指定
cnt = 0 # 箱作り
n.times do # n回繰り返し
cnt += 1
while cnt.business_days.ago(hiduke).national_holiday? do # 祝日かどうか判定
cnt += 1
end
end
puts cnt.business_days.ago(hiduke)
実行結果
2018-12-19
おわりに
'business_time'では祝日が休日に含まれないので 'holiday_japan'で祝日判定。振替休日にも対応。
3営業日前だけを判定にすると、1・2営業日前が祝日でもカウントしてしまうのでn回数分判定を繰り返す。
もし今日の日付を元にしたいなら、タイムゾーンの問題がでてくる。
n営業日後を出したいなら ago をafter に変えればOK。
いろんな日付で試してて気付いたけど、大晦日って祝日じゃないんだなあ…
完璧にするなら「国民の祝日」ではないけど一般的な休日も含められるようにする必要あり。