Time & date

Business days calculator

Counts business days between two dates or adds business days to a start date, with weekend and holiday rules.

01Inputs
02Results
Business days
End date
Total calendar days
Weekend days
Holidays
Day breakdown
03How it works

Why this calculation

Project planning, contract deadlines, payment terms ("net 30 business days"), legal notice periods, regulatory response windows, payroll timesheets — every workplace runs on business-day arithmetic, not calendar-day arithmetic. The arithmetic is deceptively easy in principle but tedious in practice: count weekdays in a span, optionally exclude observed holidays, and don't accidentally skip-then-double-skip a holiday that lands on a weekend. Office calendars do this in their head for short spans (a week or two); for anything past a month, doing it manually invites errors that show up later as missed deadlines or disputed payment dates. This calculator handles both directions of the question — counting business days between two given dates, or projecting forward (or backward) by a given number of business days from a start date — and lets users feed in a comma-separated list of holiday dates that are skipped on top of weekends.

The skip-Saturday and skip-Sunday flags are independent so the calculator works for places where the working week is Sunday–Thursday (Saudi Arabia, parts of the Middle East) and not just the standard Monday–Friday.

The formula

The calculator iterates day-by-day over the requested span. For each calendar day visited, it classifies the day as:

  1. Weekend if the day-of-week is in the skip-set (Sat-and/or-Sun).
  2. Holiday if it appears in the user-supplied holiday list and is not already classified weekend.
  3. Business day otherwise.

For between mode (count business days from start_date to end_date inclusive):

  • Walk every day from start to end (either direction).
  • Tally weekend / holiday / business hits.
  • Output the four counts (business, weekend, holiday, total).

For add mode (start_date + N business days):

  • Walk forward (N > 0) or backward (N < 0) one calendar day at a time.
  • Decrement |N| only when the day is a business day.
  • When |N| reaches 0, that day is the result date.
  • Tally weekend / holiday / business hits along the way (gives full visibility into "we walked past 3 weekend days and 1 holiday").

The implementation is O(span) — fine for spans up to several years; for span > 100 000 days the day-by-day walk would slow but is still tractable in browser JS. The closed-form alternative (multiplying full weeks and trimming endpoints) is faster but harder to get right around holidays that land on weekends. The day-by-day walk is robust by construction.

How to use

Pick mode: between (count business days in a date range) or add (project forward / backward).

Enter start date (YYYY-MM-DD). Enter either end date (between mode) or days to add (add mode; negative = subtract).

Toggle skip Saturdays and skip Sundays for the work-week pattern at your location.

Enter holidays as a comma-, space-, or semicolon-separated list of YYYY-MM-DD dates. Holidays that fall on a weekend are not double-counted (they're already excluded as weekends).

The result panel shows business days as the headline, the resulting end date (in add mode this is the new date; in between mode it's the input end date echoed), the total calendar days, and the weekend and holiday day counts. The bar chart shows the breakdown visually.

Worked example

Q1 2026 working days (between mode, no holidays):

  • Start 2026-01-01, end 2026-03-31.
  • Total calendar days: 90 (inclusive).
  • Saturdays: 13. Sundays: 13. Holidays: 0.
  • Business days: 90 − 26 = 64.

If we add holidays 2026-01-01 (New Year's), 2026-04-06 (Easter Monday — but that's outside Q1), 2026-05-01 (Labor Day, outside Q1):

  • Of those, only 2026-01-01 falls in the range; it's a Thursday, so it counts as a holiday.
  • Business days: 64 − 1 = 63.

+10 business days from 2026-05-04 (a Monday):

  • May 4 (Mon) → +1 business → walk to May 5 (Tue) → +1 → May 6 → +1 → May 7 → +1 → May 8 (Fri) → +1 → May 9 (Sat, skip) → May 10 (Sun, skip) → May 11 (Mon) → +1 → May 12 → +1 → May 13 → +1 → May 14 → +1 → May 15 (Fri).
  • Result: 2026-05-15 after 10 business days, walking past 2 weekend days.

Project span April 2026 minus the two Easter weeks:

  • Start 2026-04-01, end 2026-04-30.
  • Holidays 2026-04-06 (Easter Monday), 2026-04-13 (a Monday).
  • Total calendar days: 30. Saturdays: 4 (4, 11, 18, 25). Sundays: 4 (5, 12, 19, 26). Holidays applied: 2026-04-06 (Mon, business → holiday), 2026-04-13 (Mon, business → holiday).
  • Weekend: 8. Holiday: 2.
  • Business days: 30 − 8 − 2 = 20.

Pitfalls

Inclusive vs exclusive endpoints. The calculator counts both endpoints in between mode (Apr 1 to Apr 30 = 30 calendar days). Some legal contexts ("business days from contract signing") count only the days after signing; check the contract language.

Holiday on a weekend. If your jurisdiction shifts a weekend holiday to the next Monday (US Federal observance), enter the observed date, not the actual. The calculator does not auto-shift.

Half-day holidays. Christmas Eve, New Year's Eve, and similar half-business-day observances are jurisdiction-specific. The calculator only handles full-day holiday exclusions.

Half-day weekends (Saturday morning is a working morning in some legacy industries). Not modeled; the calculator either skips Saturday entirely or counts it entirely.

Religious-calendar holidays. Easter, Eid, Yom Kippur shift dates year-to-year. Compute the date externally (Easter is a Gregorian-calendar lunar calculation) and feed it in; the calculator does not embed religious-calendar resolvers.

Time zones. The calculator works in UTC for arithmetic stability but uses the YYYY-MM-DD string the user supplies as-is. For contracts where "business day" is defined by a specific timezone (e.g. New York time), that timezone-day boundary may differ from local; usually the difference doesn't matter at day granularity, but for cross-border contracts at midnight it can.

Direction of "add −10". Subtracting business days walks backward. The same skip-weekend logic applies: −10 business days from a Monday produces the previous-but-one Monday, not "10 calendar days ago".

Year-boundary transitions. The arithmetic is calendar-aware, including leap-day handling (Feb 29 only every 4 years).

Different weekend conventions. UAE moved from Sunday-Thursday workweek to Monday-Friday in 2022. Israel uses Sunday-Thursday. Saudi Arabia uses Sunday-Thursday. The skip-Sat / skip-Sun toggles let you model these — uncheck Saturday-skip and check Friday-skip via the holiday list (Fridays for the year if it's a fixed pattern).

Holidays are floor, not cap. The calculator skips listed dates if they would otherwise be business. It does not "add" holidays; if a date is already weekend, putting it in the holiday list is a no-op.

Floating holidays not auto-handled. Thanksgiving (4th Thursday of November), Memorial Day (last Monday of May), Mother's Day — these need to be computed for the target year and entered as concrete dates. The calculator is a pure arithmetic engine.

Long horizons. Spans over 10 years are calculated correctly but the per-day walk is the slow path; for very long horizons, a closed-form weeks × 5 + endpoint-trim approach is faster.

Variations

  • Working hours mode: extends business days to business hours by adding a 9 AM–5 PM workday and partial-day support.
  • SLA-deadline mode: same arithmetic but with hour granularity and per-day SLA window.
  • Country-specific holiday packs: pre-loaded holiday lists (US Federal, EU Schengen, FR public, UK bank holidays).
  • Fiscal year arithmetic: counts business days in a fiscal-year-aligned span.
  • Reverse-deadline calc: given a target deadline, project N business days back to find the "must start by" date.

Related calculators