Methodology — Business Days API
Updated
Independent editorial team. Every numeric claim cites a primary source — IRS / agency publication, federal or state statute, or controlling case law.
Data sourcing
Every jurisdiction's holiday data comes from a primary government or exchange publication:
- US federal: Office of Personnel Management (opm.gov), 5 USC § 6103
- NYSE / NASDAQ: nyse.com/markets/hours-calendars; nasdaq.com/market-activity/stock-market-holiday-schedule
- UK: gov.uk/bank-holidays.json (official JSON feed, free, machine-readable)
- ECB TARGET2: ecb.europa.eu/paym/target/target2/profuse/calendar
- Germany: Federal + per-state Feiertagsgesetze (cross-checked against feiertagskalender.ch)
- France: Code du Travail Art. L3133-1 + service-public.fr
- Japan: Cabinet Office of Japan (cao.go.jp/chosei/shukujitsu) + JPX
- Canada: canada.ca + TSX trading calendar
- Australia: fairwork.gov.au + ASX trading calendar
- Singapore: mom.gov.sg + SGX trading calendar
- Switzerland: feiertagskalender.ch + SIX trading calendar
Observed-date logic
When a fixed-date holiday falls on a weekend, jurisdictions apply different observance rules. We encode these explicitly in our data files (not as an algorithm):
- US federal (5 USC § 6103(b)): Saturday-falling → observed previous Friday; Sunday-falling → observed next Monday.
- UK (Banking and Financial Dealings Act 1971): Saturday/Sunday-falling → observed next Monday (with cascading when Monday is also a holiday — e.g., Boxing Day landing on Saturday with Christmas Day already on Friday).
- NYSE / NASDAQ: NYSE Rule 51 / Notice 18-13: Saturday-falling holiday → not observed (market is already closed Saturday); Sunday-falling → observed Monday.
- Continental Europe (DE, FR, CH): No observed-date shifting. Fixed-date holidays falling on a weekend are simply not observed elsewhere.
- Japan (Furikae kyūjitsu rule): Sunday-falling → observed next Monday. No Saturday shift.
Easter-derived holidays
Good Friday, Easter Monday, Ascension, Whit Monday, and Corpus Christi (DE-BY) are computed deterministically via the anonymous Gregorian (Meeus/Jones/Butcher) algorithm.
Lunar holidays
Vesak Day, Hari Raya Puasa, Hari Raya Haji, and Deepavali (Singapore) are lunar/calendar-dependent and announced annually by Singapore's Ministry of Manpower. We seed these year-by-year from the official MOM announcement rather than computing them.
Verification
An audit script (scripts/audit-businessdays.mjs) runs against production data and verifies:
- Every
primarySources[].urlreturns HTTP 200 (with allowlist for known HEAD-blocker hosts) - Every
primarySources[].quoteappears verbatim in the cited page (when fetchable) - Each year's holiday set in each jurisdiction has the expected count (no entries silently disappeared)
Drift is flagged and fixed before the next release. The verbatim-quote rule is non-negotiable — every quote string must be character-exact text from the cited URL, not a paraphrase.