Scattered wooden letter tiles spell 'WEEKDAY' on a rustic wooden surface. A working brief on add business days formula as of 2027
Photo by Markus Winkler on Pexels

Maintenance

Part of Add Business Days: Four Assumptions to Set First

A working brief on add business days formula as of 2027

What the WORKDAY formula really does at the edges: rest-day starts, zero and negative counts, silently ignored text closures, and a hand method that matches.

The formula is one line. What it does at the edges is the article.

=WORKDAY(start, days, [closures])

That returns the date days working days after start, skipping Saturdays, Sundays and anything in closures. The same name and arguments work in Excel and Google Sheets. Every surprising result people get from it comes from one of five edge behaviors, all of them deliberate, none of them documented where you would look.

What to take away

  • The start date is day zero. The function never returns the start unless days is zero, and it never counts the start as one of the days.
  • A start on a rest day behaves as if you had started on the last working day before it.
  • Nothing on this page computes for you. The cases below were produced by the method, and the hand method at the end reproduces the function without a spreadsheet.

The five edge behaviors

All cases in March 2027, Saturday-Sunday weekend, nothing closed unless stated.

Edge cases in March 2027

Start

Friday 5th
1
Saturday 6th
1
Saturday 6th
0
Sunday 7th
-1
Wednesday 31st
1
Monday 1st
10

Days

Friday 5th
Monday 8th
Saturday 6th
Monday 8th
Saturday 6th
Saturday 6th
Sunday 7th
Friday 5th
Wednesday 31st
Thursday 1 April
Monday 1st
Tuesday 16th

Result

Friday 5th
Saturday 6th
Saturday 6th
Sunday 7th
Wednesday 31st
Monday 1st
StartDaysResultWhat happened
Friday 5th1Monday 8thThe weekend is skipped, not counted
Saturday 6th1Monday 8thA rest-day start acts like the preceding Friday
Saturday 6th0Saturday 6thZero returns the start unchanged, rest day or not
Sunday 7th-1Friday 5thNegative counts backwards; a rest-day start acts like the following Monday
Wednesday 31st1Thursday 1 AprilMonth ends are invisible to the function
Monday 1st10, Wednesday 10th closedTuesday 16thEach weekday closure pushes the result one working day out

The third row is the one that breaks sheets. A formula that adds zero days to "today" as a way of normalizing to a working day does not normalize anything. If you need the next working day on or after a date, use WORKDAY(date-1, 1).

The round trip that is not one

Add five working days to Monday 1 March and the function gives Monday 8 March. Counting the working days between those Mondays with NETWORKDAYS gives six because it counts both endpoints.

WORKDAY vs NETWORKDAYS

WORKDAY

Monday 1 March + 5
Monday 8 March
Counts
steps
Difference
always one
Saturday +1 -1
Friday before

NETWORKDAYS

Monday 1 March + 5
six days
Counts
members of a set
Difference
when both ends working
Saturday +1 -1
not inverse

Neither is wrong: one counts steps, the other counts members of a set, and the difference is always exactly one when both ends are working days.

Reverse the step and the trip closes: WORKDAY from Monday 8th with -5 lands on Monday 1st. But start on a Saturday, add one, subtract one, and you land on the Friday before your Saturday, not on the Saturday. The two directions are inverses only between working days.

A different working week

WORKDAY hard-codes Saturday and Sunday. WORKDAY.INTL takes a third argument for the rest days, either a numbered code or a seven-character string read Monday through Sunday with 1 marking a rest day:

=WORKDAY.INTL(start, days, "0000011", closures)     Saturday and Sunday
=WORKDAY.INTL(start, days, "0000110", closures)     Friday and Saturday

Everything in the edge table holds with the rest days relabeled. A start on a rest day still acts like the last working day before it.

The closures argument

A range of dates. Only entries that fall on a working day change anything; a closure that lands on a rest day is ignored, so you can paste a whole published list without pruning it. Entries stored as text are also ignored, silently, which is the commonest way a sheet gives a confident wrong answer. Check that the column right-aligns.

The list itself is not something a formula can supply and not something this site supplies. Which publisher's list governs, and why it is a body rather than a country, is set out under adding business days.

The hand method

Without a spreadsheet, for a start on a working day:

  1. Split days into whole weeks and a remainderdays = 5w + r, with r from 0 to 4.
  2. Move forward 7w calendar days. That lands on the same weekday, w weeks later.
  3. Step forward r working days one at a time, jumping over Saturday and Sunday when you hit them.
  4. Now walk the resultfor each weekday closure between the start and where you have landed, step forward one more working day, and check whether that step exposed another closure.

Checked against the function on seven cases: Monday 1st plus 5 gives Monday 8th; Monday 1st plus 7 gives Wednesday 10th; Wednesday 3rd plus 3 gives Monday 8th; Thursday 4th plus 4 gives Wednesday 10th. Friday 5th plus 2 gives Tuesday 9th; Friday 5th plus 12 gives Tuesday 23rd; Tuesday 2nd plus 17 gives Thursday 25th. All seven agree.

For a start on a rest day, first move back to the preceding working day, then apply the method. That is what the function does, and it is why the Saturday row in the table behaves as it does. The same rest-day rule decides which start convention a worked example uses, and the fifteen worked examples show all three.

What the formula does not decide

Whether day one is the start day or the day after it. Whether a cut-off hour moves a late trigger to the next day. Whose calendar the closures come from. The function applies one convention, start excluded, whole days, your list, and returns a date that looks equally confident whichever convention the document actually meant.

Read the phrasing first. "Within five business days of receipt", "five business days beginning on the date of the notice" and "five clear business days" are three different counts, and the function will happily produce a date for the wrong one.

The month-level effect, where the same count lands on different dates because months start on different weekdays, is under working days per month. The reverse operation, rounding the other way, is under subtracting business days.

When the same formula runs in a service and a sheet, the contract between the two keeps the answers identical.

Where the arithmetic comes from

None of this is special-purpose calendar code. Stepping over rest days is modular arithmetic on seven, the ordinary modulo operation. The formulas can be written in closed form because a date sits at a position in a repeating cycle.

If you ever need a date's weekday without a tool, that is a solved problem with several published methods. The one most often implemented is Zeller's congruence.

Common questions

Why does adding one day to a Saturday give Monday, not Sunday?

Because Sunday is not a working day and the function only steps through working days. The Saturday itself is treated as if it were the Friday before.

Can I pass a negative number instead of using a subtraction function?

Yes; there is no separate function. Negative days counts backwards, and the same rest-day rule applies in mirror image: a rest-day start acts like the following Monday.

How do I get "the next working day on or after" a date?

=WORKDAY(date-1, 1). Subtracting one first means a working-day date returns itself, and a rest-day date returns the Monday after it.

Does the closures range have to be sorted?

No. Order, duplicates and rest-day entries are all harmless. Text entries are not harmless; they are ignored.

More in Maintenance

Latest from Market Desk