カレンダーの土日祝日を考慮して、営業日ベースの日付計算をする(支払期日、出荷日など)

ちなみに「直後の平日」にすることも簡単にできます。

上記のコードのlatestWeekday()関数を、nextWeekday()関数として

こんな風に変更してやればOK

 

// 直後の平日を取得
const nextWeekday = function(date) {
if (dateFns.isWeekend(date) || holiday_jp.isHoliday(date)) {
const nextDate = dateFns.addDays(date, 1);
return nextWeekday(nextDate);
}
return date;
};

 

変わってるのは実質ここだけです。

const prevDate = dateFns.subDays(date, 1);

「1日前」じゃなくて「1日後」を計算してやればOK。

const nextDate = dateFns.addDays(date, 1);

 

あとは支払期日を計算するpayDate関数内で、nextWeekdayを呼ぶように変更すれば完成です。

  // 支払期日を計算
  const payDate = function (cutoffDate, terms) {
    const payDateBase = addDays(cutoffDate, terms);
    return nextWeekday(payDateBase);
  };

 

結果、こうなります!