# Business days calculator: add working days to a date

> The deadline N business days after or before a start date, skipping weekends and the holidays you list, with the calendar days it spans.

Interactive version: https://www.calcopenly.com/datetime/working-days-deadline-calculator
Subject: Date and time calculators

Counting starts on the day after the start date. Each day that is neither a weekend day nor a listed holiday counts as one working day, and the nth such day is the deadline; going backwards works the same way from the day before. This is the convention of Excel's WORKDAY functions and NumPy's busday_offset. A holiday that falls on a weekend is skipped once, not twice.

It is used for payment terms, statutory response times, service-level targets and delivery estimates. Five working days after Friday, 18 December 2026, with Christmas Day and New Year's Day listed, is Monday, 28 December, 10 calendar days later. England and Wales also have a bank holiday on 28 December 2026, the substitute day for Boxing Day; list it and the deadline moves to Tuesday, 29 December.

Public holidays differ by country and region, so none are assumed: paste your own, one ISO date per line.

## Inputs

- **Start date**
- **Working days**
- **Direction** (options: After the start, Before the start)
- **Weekend** (options: Sat–Sun, Fri–Sat, Sun only)
- **Holidays**: One ISO date per line (YYYY-MM-DD), optionally followed by a name.
- **Count the start date as day 1**: Only applies when the start date is itself a working day.

## Results

- Deadline — main result
- Day of the week
- Calendar days (days)
- Weekend days skipped
- Holidays skipped
- Holidays in the way

## Formula

$$
\text{deadline} = \text{the } n\text{-th day after the start that is neither a weekend day nor a holiday}
$$

## Worked examples

### Five working days over Christmas

- Start date: 2026-12-18
- Working days: 5
- Direction: After the start
- Weekend: Sat–Sun
- Holidays: 2026-12-25 Christmas / 2027-01-01 New Year
- **Deadline: 2026-12-28**
- **Day of the week: Monday**
- **Calendar days: 10 days**
- **Weekend days skipped: 4**
- **Holidays skipped: 1**
- **Holidays in the way: Christmas (Fri 25 Dec 2026)**
- Checked against: numpy.busday_offset('2026-12-18', 5, roll='backward', holidays=[...]) = 2026-12-28; skipped days counted by hand on a 2026 calendar

### Starting on a Saturday

- Start date: 2026-01-17
- Working days: 1
- Direction: After the start
- Weekend: Sat–Sun
- **Deadline: 2026-01-19**
- **Day of the week: Monday**
- Checked against: numpy.busday_offset('2026-01-17', 1, roll='backward') = 2026-01-19

### Friday–Saturday weekend

- Start date: 2026-01-15
- Working days: 10
- Direction: After the start
- Weekend: Fri–Sat
- **Deadline: 2026-01-29**
- **Calendar days: 14 days**
- Checked against: numpy.busday_offset('2026-01-15', 10, roll='backward', weekmask='1111001') = 2026-01-29

### Ten working days back over New Year's Day

- Start date: 2026-01-15
- Working days: 10
- Direction: Before the start
- Weekend: Sat–Sun
- Holidays: 2026-01-01
- **Deadline: 2025-12-31**
- **Day of the week: Wednesday**
- **Holidays skipped: 1**
- Checked against: numpy.busday_offset('2026-01-15', -10, roll='forward', holidays=['2026-01-01']) = 2025-12-31

### Counting the start date as day 1

- Start date: 2026-01-15
- Working days: 10
- Direction: After the start
- Weekend: Sat–Sun
- Count the start date as day 1: yes
- **Deadline: 2026-01-28**
- Checked against: numpy.busday_offset('2026-01-15', 9, roll='forward') = 2026-01-28

## Questions

### How do I work out 10 business days from a date?

Count forward from the next day and skip weekends and public holidays. With no holidays in the way, 10 business days is two full working weeks, so from a weekday it lands on the same weekday 14 calendar days later: 10 business days after Thursday, 15 January 2026 is Thursday, 29 January. Each holiday on a weekday pushes the deadline one working day further.

### Is the start date counted as a business day?

Not by default. The first working day is the day after the start, the same as Excel's WORKDAY, so 1 business day after a Monday is Tuesday. Some contracts and procedures count the start date as day 1; switch on that option and 10 working days from Thursday, 15 January 2026 ends on Wednesday, 28 January instead of Thursday, 29 January.

### What if the start date falls on a weekend or holiday?

Counting still begins with the next working day, so the weekend adds nothing. 1 business day after Saturday, 17 January 2026 is Monday, 19 January, the same answer as from Friday, 16 January. With the start-date option on, a start that isn't a working day can't be day 1, and the calculator warns you.

### How many working days are in a month?

Between 20 and 23 weekdays before public holidays. February has exactly 20 in a common year and 20 or 21 in a leap year; a 30-day month has 20 to 22 and a 31-day month 21 to 23, depending on the weekday it starts on. A year of 261 weekdays, as in 2026, averages 21.75 per month.

### How accurate is the business days calculator?

Accuracy depends on your inputs and the method's assumptions. Decimal arithmetic uses 50 significant digits, but estimates, numerical methods and source data can be less precise; the displayed rounding does not remove those limits. It is checked against 5 worked examples whose answers come from independent sources; for example, “Five working days over Christmas” is checked against numpy.busday_offset('2026-12-18', 5, roll='backward', holidays=[...]) = 2026-12-28; skipped days counted by hand on a 2026 calendar.

### Where does the method come from?

Microsoft Excel WORKDAY.INTL function (same convention: the start date is not counted); NumPy busday_offset.

## Sources

- [Microsoft Excel WORKDAY.INTL function (same convention: the start date is not counted)](https://support.microsoft.com/office/workday-intl-function-a378391c-9ba7-4678-8a39-39611a9bf81d)
- [NumPy busday_offset](https://numpy.org/doc/stable/reference/generated/numpy.busday_offset.html)
