calc / date

営業日計算

開始日〜終了日の営業日数を計算します。祝日リストの貼り付けと土曜除外オプションに対応しています。

「日本の祝日計算」ツールからコピーした日付を貼り付けてください
12
営業日数
business days
16
期間合計
total days
2
除外: 日曜
sundays
2
除外: 土曜
saturdays
0
除外: 祝日
holidays

使い方

01
  1. 開始日・終了日を入力します(当日を含む)
  2. 必要に応じて「土曜日を除外する」をチェックします
  3. 「日本の祝日計算」ツールで取得した日付リストを祝日欄に貼り付けます
  4. 入力と同時に営業日数・除外数が自動で計算されます

実装コード

02

1日ずつ走査するシンプルな実装です。祝日は Set<string> で管理しO(1)で検索します。

export function calcBusinessDays(opts: BusinessDaysOptions): BusinessDaysResult {
  const { startDate, endDate, excludeSaturday, holidays } = opts
  if (startDate > endDate) return { businessDays: 0, ... }

  const holidaySet = new Set(holidays)
  let businessDays = 0, excludedSundays = 0, ...

  for (let d = new Date(start); d <= end; d.setDate(d.getDate() + 1)) {
    const dow = d.getDay()
    if (dow === 0) { excludedSundays++; continue }
    if (dow === 6 && excludeSaturday) { excludedSaturdays++; continue }
    if (holidaySet.has(dateStr) && dow !== 0 && !(dow === 6 && excludeSaturday)) {
      excludedHolidays++; continue
    }
    businessDays++
  }
  return { businessDays, totalDays, excludedSundays, excludedSaturdays, excludedHolidays }
}

よくある使用例・注意点

03
祝日は自動取得しない理由
APIに依存せずオフラインでも動くよう、祝日は手動入力方式にしています。「日本の祝日計算」ツールで取得した日付リストをそのまま貼り付けると簡単です。
土曜日の扱い
デフォルトでは土曜日も除外します(週休2日制想定)。土曜出勤がある場合はチェックを外してください。
同日入力時の挙動
開始日と終了日が同じ日付の場合、その1日を計算します(平日なら1営業日、日曜なら0)。
祝日と土日の重複
土日と重なる祝日は「除外: 祝日」にはカウントされません。日曜祝日は「除外: 日曜」、土曜祝日(除外ON時)は「除外: 土曜」にカウントされます。

関連ツール

04
日本の祝日計算西暦・和暦変換文字数カウンター

ソースコード

05

このツールのソースコード(テストコードを含む)はGitHubで公開しています。MITライセンスで自由に利用・改変できます。

GitHub でコードを見る →