Skip to main content

Business Days Calculator

Count business days between two dates excluding weekends and custom holidays.

Reviewed by · Last reviewed

How to Use the Business Days Calculator

  1. Pick a start date and an end date with the two date pickers at the top. Either order works - the calculator normalises so the earlier date is counted first.
  2. Optionally add holidays with the "Exclude holidays" picker and the Add Holiday button. Each added date shows up as a chip you can remove with the small close control.
  3. Read the four-stat breakdown: Business Days (Mon-Fri, not on a holiday), Weekend Days (Sat-Sun), Holidays Excluded (how many of your holiday dates fell inside the range and were not already a weekend), and Total Days (the raw span).

The result updates reactively on every field change, so you can spin through candidate end dates to find one that yields a specific workday count.

What The Counter Actually Does Under The Hood

The component walks every date from the earlier to the later boundary using Date.prototype.setDate(getDate() + 1), which is JavaScript's idiomatic way to step forward a day while letting the engine handle month/year rollovers. For each day it checks getDay(): values 0 (Sunday) and 6 (Saturday) are classified as weekend; everything else is a weekday candidate. Holiday dates are stored in a Set of YYYY-MM-DD strings so membership lookup is O(1). A day on both weekend and holiday lists counts once as weekend (because it was not a business day to begin with), which matches how HR and payroll systems usually reason about it. Using the built-in Date means leap years and month lengths come for free from ECMAScript's proleptic Gregorian calendar.

Why People Reach For Business-Day Math

  • Counting contract delivery days where the SLA reads "within 10 business days of purchase order" and you need to pin the exact due date.
  • Figuring out a shipping ETA where the carrier quotes transit in business days and you want to tell the customer an actual calendar date.
  • Calculating a pay-period span for hourly payroll where weekends and public holidays are not paid unless explicitly noted.
  • Building a project schedule backwards from a launch, adding slack for known statutory holidays.
  • Tracking tax-filing windows (e.g. the US IRS grants business-day extensions when April 15 falls on a weekend).
  • Scheduling a real-estate closing or escrow where "business days after inspection" is a legally meaningful span.

Edge Cases That Trip Up Business-Day Math

  • Holidays that fall on a weekend. If US Independence Day (July 4) is a Saturday, federal agencies observe the previous Friday; if it is a Sunday, they observe the following Monday. This is called an "observed" holiday. Add the observed date as the holiday, not the nominal July 4, or the count stays wrong.
  • Countries with Mon-Fri are not universal. Israel uses Sunday-Thursday; several Gulf states (Saudi Arabia, Bahrain, UAE before 2022) used Sunday-Thursday. Iran's working week is Saturday-Wednesday with Thursday a half-day. The tool assumes the Western five-day Mon-Fri; adjust by adding every Friday to the holiday list if you need a Gulf-style week.
  • Regional holidays vs. national. The US has ~11 federal holidays, but California has Cesar Chavez Day and some states have Patriots' Day. UK bank holidays differ between England/Wales, Scotland, and Northern Ireland. Add your jurisdiction-specific list manually.
  • Moving holidays. Thanksgiving (US) is the fourth Thursday of November; UK spring bank holiday moves by act of Parliament in special years (royal jubilees, funerals). Pre-populated libraries get these wrong faster than you think.
  • Half-days. Christmas Eve and New Year's Eve are legal half-work-days in many countries. The tool counts whole days only; treat a half-day as a whole day or a holiday depending on your contract.

Holiday Calendars Around The World

Business-day counting lives or dies on the holiday list. The US federal calendar defines roughly 11 paid holidays (New Year, MLK Day, Memorial Day, Juneteenth since 2021, Independence Day, Labor Day, Thanksgiving, Christmas, etc.). UK bank holidays come from the Banking and Financial Dealings Act 1971 and vary by constituent country - Scotland has St. Andrew's Day, Northern Ireland has St. Patrick's Day. India's public holidays mix national (Republic Day, Independence Day, Gandhi Jayanti) and state holidays that follow lunar calendars (Diwali, Eid, Holi), so Gregorian dates shift each year. MENA working weeks historically start Saturday or Sunday; the UAE moved to a Sat-Sun weekend in 2022. For EU cross-border payments, the TARGET2 calendar governs bank working days.

Business Days In Excel, SQL, And Python Vs. This Page

Excel has NETWORKDAYS(start, end, [holidays]) and NETWORKDAYS.INTL(start, end, [weekend_code], [holidays]), the latter supporting different weekend definitions - handy for MENA or Israel. It is the spreadsheet answer. PostgreSQL and BigQuery do not ship a built-in business-day function; you write a CTE with generate_series and filter. Python's workalendar library ships pre-built holiday rules for 70+ jurisdictions and is the right pick when you need programmatic access with accurate regional calendars. numpy has np.busday_count and np.busday_offset with custom weekmasks and holiday arrays. This page is fastest for one-shot manual calculations where you already know your holiday list and you do not want to boot up a spreadsheet, terminal, or notebook. For repeated automated work across jurisdictions, workalendar or a holiday-calendar API is the right tool.

Frequently Asked Questions

Does the tool include both the start and end date in the count?

Yes - both endpoints are inclusive. A start of Monday and an end of Friday counts all five days. This matches how most legal and contractual language reads ("five business days starting Monday"). If your contract is exclusive-start or exclusive-end (and some are), subtract one from the business-day figure the tool returns.

What if my holiday falls on a Saturday or Sunday?

The tool classifies it as a weekend day, not a holiday, because the day was not going to be a business day anyway. The "Holidays Excluded" counter only increases when a holiday lands on a weekday and displaces a business day. If your organisation observes a weekend holiday on the adjacent Friday or Monday, add the observed date instead of the nominal date - that is the calendar the tool needs.

Can I change the weekend to Friday-Saturday for a Gulf calculation?

Not via a toggle - the implementation hard-codes Saturday and Sunday. The workaround is to add every Friday (or every Saturday) in your span to the holiday list and accept that "Weekend Days" will be mislabelled. For a clean Sun-Thu or Sat-Wed workweek, Excel NETWORKDAYS.INTL or the Python workalendar library handle this natively.

Why does the count sometimes differ from my HR system by one day?

Three common causes. First, your HR system may treat the start date as exclusive ("days between" vs. "days from and including"). Second, it may apply a company-specific holiday calendar that includes floating days (birthday, religious observance) you did not add. Third, some systems round half-days differently. Compare the holiday list and endpoint convention side by side before assuming the tool is wrong.

Does the tool know about US federal holidays automatically?

No. The holiday list starts empty and you add dates manually. Automating it would mean picking one country's calendar as a default, which is the wrong shape for an international audience - the UK, Japan, Germany, Brazil, and India all have different lists. Manual entry keeps the tool honest; a one-time copy-paste from a government source is fine for most annual planning.

Is there a maximum date range it can handle?

Practically, ranges up to several centuries are fine because the loop is linear and a few thousand iterations is nothing. JavaScript Date itself supports ±100 million days from the epoch, i.e. roughly year -271821 to year +275760, which is wider than anyone should need. The UI responsiveness remains smooth for spans up to around 50,000 days (~137 years); beyond that you may see a brief lag as the walker iterates.

Does the tool handle leap years?

Yes, because it relies on native Date arithmetic. February 29 is walked like any other day, and when a holiday list includes Feb 29 of a non-leap year the entry is silently ignored (since the date does not exist). The Gregorian leap rule - every 4 years, except centuries not divisible by 400 - is baked into ECMAScript and you do not need to think about it.

Does my holiday list persist across browser sessions?

No. Holidays and dates live in Preact state only; a reload clears them. This is a deliberate trade-off for privacy and simplicity - the tool stores nothing, so there is nothing to leak. If you need a reusable calendar, keep a CSV of your holiday dates and paste them back in. A future version could offer optional localStorage persistence behind a clear opt-in.

Can I subtract business days to find a start date given an end date?

Not directly - this tool counts within a given range, it does not offset. For the inverse ("what start date gives me exactly 15 business days by June 30?") you can iterate manually by changing the start date until the count matches, or use numpy.busday_offset in Python which is designed for this. We may add a "shift by N business days" mode in a later revision.

Does the calculator use any network connection?

No. Everything happens in the browser - the Preact island does the walk, the Date arithmetic, and the Set lookup locally. Holiday dates you add are only in memory. We would have no way to know which holidays or date ranges you enter even if we wanted to, short of adding explicit telemetry, which we do not.

More Date & Time