2つの日付の間の営業日数を数える

米国の2026年12月1日から31日までの営業日数は、両端を含めて平日23日から12月25日(金曜日)のクリスマスを差し引いた22日です。対象期間の平日を数え、その日に当たる祝日を差し引きます。

APIで計算する

Narwhalには営業日用のエンドポイントはありません。GET /v1/calendars/holidays/{country}/{year}で国と年を指定して祝日を取得し、そのリストにない平日を数えます。ここでの営業日は、選択した国の祝日を除いた月曜日から金曜日です。計算には国と年の組み合わせごとに1回のリクエストが必要で、年をまたぐ期間では各年を個別にリクエストします。

  1. APIキーを取得 無料のAPIキーを取得し、環境変数NARWHAL_API_KEYに保存します。スクリプトはAuthorization: Bearer YOUR_KEYヘッダーでキーをhttps://api.narwhalapi.comに送信します。
  2. 国と日付の範囲を選択 USA、GBR、JPN、DEU、IDNなどのISO 3166 alpha-3国コードを使用します。この例ではUSAを指定し、2026年12月1日から31日までを両端の日付を含めて数えます。
  3. 祝日の集合に含まれない平日を数える 選択した日付をこのPythonスクリプトに指定します。対象期間の各年の祝日を集合にまとめ、その集合に含まれない月曜日から金曜日の日付だけを数えます。
    Python、2つの日付の間の営業日数
    import os
    from datetime import date, timedelta
    import requests
    
    API = "https://api.narwhalapi.com"
    HEADERS = {"Authorization": f"Bearer {os.environ['NARWHAL_API_KEY']}"}
    
    def holidays(country: str, year: int) -> set[str]:
        r = requests.get(f"{API}/v1/calendars/holidays/{country}/{year}", headers=HEADERS, timeout=10)
        r.raise_for_status()
        return {h["date"] for h in r.json()["holidays"]}
    
    def business_days(start: date, end: date, country: str = "USA") -> int:
        """Business days from start to end, counting both ends, like NETWORKDAYS."""
        off = set()
        for year in range(start.year, end.year + 1):
            off |= holidays(country, year)
        days = (start + timedelta(n) for n in range((end - start).days + 1))
        return sum(1 for d in days if d.weekday() < 5 and d.isoformat() not in off)
    
    print(business_days(date(2026, 12, 1), date(2026, 12, 31)))
  4. 指定した期間の結果を確認 米国の2026年12月1日から31日を指定すると、スクリプトは22を出力します。将来の年もカレンダーが公開済みであれば利用でき、未公開の場合は404 calendar_not_publishedが返されます。

2026年の米国連邦政府カレンダーには、1月1日、1月19日、2月16日、5月25日、6月19日、7月3日、9月7日、10月12日、11月11日、11月26日、12月25日の11日間の祝日があります。2026年12月内の期間では、この年間リストのうちクリスマスが対象期間に含まれます。

スプレッドシートまたはコードを使わずに計算する

ExcelまたはGoogle Sheetsで祝日の日付を1つの列に入力し、その列をHolidays範囲として使用します。Narwhalの祝日カレンダー (英語)の国別ページから日付をコピーするか、APIレスポンスから取得します。数式は日付間の平日を数え、祝日の列にある日付を除外します。期間の開始日と終了日も含まれます。

ExcelまたはGoogle Sheets
=NETWORKDAYS(DATE(2026,12,1), DATE(2026,12,31), Holidays)

米国の2026年12月では、2026-12-25を含む1セルのHolidays範囲を指定すると、結果は22になります。祝日の範囲を指定しない場合はクリスマスを差し引かずに平日を数えるため、結果は23になります。祝日の列は、数える対象の国と年に合わせてください。年をまたぐ期間には各年の祝日の日付が必要です。

スクリプトやスプレッドシートの数式を使わずに数える場合は、国別のカレンダーページで祝日の日付を確認します。選択した期間の月曜日から金曜日を数え、その平日に当たるリスト内の祝日を差し引きます。

状況に応じた方法の選び方

状況適した方法理由
少数の日付を一度だけ計算祝日の列を指定したスプレッドシートのNETWORKDAYS数式は開始日と終了日を含め、指定した祝日を差し引きます
多数の日付の組み合わせや毎晩の処理国と年ごとに祝日を1回取得するPythonスクリプト同じ国と年の日付の組み合わせで祝日の集合を再利用します
地域別または銀行のみの営業日scopeとsubdivision_codes、または独自の祝日リストを使用祝日リストを必要なカレンダーに合わせる必要があります

開始日と終了日も含まれますか?

はい。PythonスクリプトとNETWORKDAYSは開始日と終了日の両方を含めます。両端の日付も営業日の条件を満たす必要があり、土曜日、日曜日、祝日は合計に加算されません。両端を含むという指定は期間を定め、実際に数える日付は平日と祝日の規則で決まります。

泊数を数える場合や終了日を除外する場合は、終了日が営業日であれば1を差し引きます。終了日が週末や祝日としてすでに除外されていれば、営業日数は変更しません。

祝日が週末に当たると何が変わりますか?

その国に振替日がある場合は、その日付を使用します。APIは振替日をobserved: trueで示します。2026年の米国カレンダーでは、7月4日が土曜日のため、独立記念日は7月3日(金曜日)として記載されています。

2026年7月1日から31日では、7月3日(金曜日)を平日数から除外します。7月4日(土曜日)は月曜日から金曜日の集計に含まれないため、さらに差し引く必要はありません。振替日にはカレンダーが返す日付を使用します。

週末や地域の祝日が異なる場合はどうしますか?

対象のカレンダーに合う週末のパターンと祝日の対象範囲を使用します。Pythonスクリプトは土曜日と日曜日を週末としています。スプレッドシートで金曜日と土曜日を週末にする場合は、NETWORKDAYS.INTL(start, end, 7, Holidays)を使用します。

祝日の各項目にはdate、name、scope、subdivision_codesがあり、local_nameを含む場合もあります。地域別カレンダーには対象範囲と地域区分のフィールドを使用し、日付で重複を除去します。2026年のGBRにはイングランドとウェールズ、北アイルランド、スコットランドの個別の項目があり、28行に14の異なる日付が含まれます。

銀行、取引所、企業のカレンダーは祝日カレンダーと異なる場合があります。米国のリストの対象範囲はfederal_governmentで、NYSEが休場する2026年4月3日の聖金曜日はこの連邦祝日リストに含まれません。必要なカレンダーが異なる場合は、独自のリストを使用します。

計算例:米国の2026年12月1日から31日

2026年12月は31日間で、12月1日(火曜日)に始まります。月の初日と末日を含めると平日は23日です。クリスマスは2026年12月25日(金曜日)なので、この平日の祝日を差し引きます。

米国での対象期間平日数平日の祝日数営業日数
2026年12月1日〜31日231、12月25日のクリスマス23 - 1 = 22
2026年11月20日〜12月4日111、11月26日の感謝祭11 - 1 = 10

2つ目の期間では、2026年11月20日と12月4日を含めます。平日は11月20日、23日、24日、25日、26日、27日、30日と、12月1日、2日、3日、4日です。平日は合計11日になります。感謝祭は2026年11月26日(木曜日)なので、これを差し引くと営業日数は10日です。

公開。