NETWORKDAYSWorking DaysBusiness DaysWORKDAYHolidays

Count Working Days Between Dates in Excel

Count working days between dates with NETWORKDAYS, NETWORKDAYS.INTL and WORKDAY in Excel and Google Sheets. Covers holidays, custom weekends and reverse dates.

Introduction

Calendar subtraction tells you how long a period lasted; NETWORKDAYS tells you how much of it was actually worked. It skips Saturdays and Sundays, optionally skips a holiday list, and counts both endpoints. Every example below uses one project window — Monday 5 January to Friday 30 January 2026 — so the differences between the functions are easy to see.

Prerequisites

  • Dates stored as real dates, not text
  • Familiarity with DATE() and basic cell references

1What NETWORKDAYS Actually Counts

NETWORKDAYS(start_date, end_date, [holidays]) returns the number of whole working days between two dates, with Monday to Friday treated as workdays. Both endpoints are included when they fall on a weekday, which is the detail that makes the result one higher than people expect. The window 5 January to 30 January 2026 spans 26 calendar days, of which 6 are weekend days.

1

Build the dates with DATE

Text dates such as "5/1/2026" are ambiguous across locales; DATE() is not.

=NETWORKDAYS(DATE(2026,1,5),DATE(2026,1,30))
2

Compare with plain subtraction

The difference excludes the start date and ignores weekends entirely.

=B2-A2

Example

=NETWORKDAYS(A2,B2)
Result: 20

A2 is 5 Jan 2026 (Monday) and B2 is 30 Jan 2026 (Friday). Of the 26 days in the window, 20 are weekdays, so the answer is 20 — not the 25 that plain subtraction returns.

Because both endpoints count, a task that starts and ends on the same working day returns 1, not 0.

An invalid date produces #VALUE! rather than a quietly wrong number — treat that error as a data problem.

2Subtracting Holidays From the Count

The optional third argument takes a range or array of holiday dates. Only holidays that land on a working day reduce the total, because a Saturday holiday is already excluded as a weekend day and is not deducted a second time. Keep the list in one range so every formula on the sheet references the same calendar.

1

Point at a named range

One definition means next year's dates update every formula without editing any of them.

=NETWORKDAYS(A2,B2,Holidays)
2

Prove a weekend holiday changes nothing

10 January 2026 is a Saturday, so adding it to the list leaves the count at 10 for 5–16 January.

=NETWORKDAYS(DATE(2026,1,5),DATE(2026,1,16),DATE(2026,1,10))

Example

=NETWORKDAYS(A2,B2,D2:D10)
Result: 19

D2:D10 holds the company holiday list, which includes 19 January 2026 — Martin Luther King Jr. Day, a Monday. One weekday drops out of the window, so 20 becomes 19.

Holidays must be genuine dates. A text entry like "Jan 19" can be skipped silently or raise #VALUE!, depending on how it was typed.

Duplicate dates in the holiday list are harmless — each working day is only removed once.

Both Excel and Google Sheets accept a cell range here, and both accept a spilled array from UNIQUE or FILTER.

3Custom Weekends with NETWORKDAYS.INTL

NETWORKDAYS hard-codes Saturday and Sunday. NETWORKDAYS.INTL(start_date, end_date, [weekend], [holidays]) replaces that with either a weekend code — 1 to 7 for two-day weekends, 11 to 17 for a single day off — or a seven-character string that runs Monday to Sunday, where 1 means closed and 0 means open. Everything else about the function is identical.

1

Single-day weekends use 11 to 17

11 = Sunday only, 12 = Monday only, and so on through 17 = Saturday only.

=NETWORKDAYS.INTL(A2,B2,11)
2

Spell the pattern out when the code does not fit

The string starts on Monday, so 0000011 is exactly the same as code 1.

=NETWORKDAYS.INTL(A2,B2,"0000011")

Example

=NETWORKDAYS.INTL(A2,B2,7)
Result: 19

Code 7 makes Friday and Saturday the weekend, as in much of the Gulf and Israel. Inside 5–30 January 2026 that leaves 19 working days instead of 20: Sunday starts counting, Friday stops.

Code 11 returns 23 for the same window, because only three Sundays fall inside it.

The weekend string must be exactly seven 0/1 characters, and all 1s is rejected.

NETWORKDAYS.INTL needs Excel 2010 or later; Google Sheets offers it with the same codes and the same string rule.

Working four days a week? A Monday-to-Thursday pattern is "0000111".

4Turn a Count into a Due Date with WORKDAY

WORKDAY is the inverse of NETWORKDAYS: give it a start date and a number of working days and it returns the date you land on. The start date itself is not counted, positive numbers move forward, negative numbers move backward, and the optional holiday list applies exactly as before. This is the formula behind SLA deadlines and payment terms.

1

Forward without holidays

Ten working days after 5 January is Monday 19 January.

=WORKDAY(A2,10)
2

Backward from a deadline

Counting back five working days from 30 January gives Friday 23 January.

=WORKDAY(B2,-5)

Example

=WORKDAY(A2,20,D2:D10)
Result: 3-Feb-2026

Starting Monday 5 January 2026, the twentieth working day is Tuesday 3 February once 19 January is excluded. Without the holiday list it would be Monday 2 February.

WORKDAY never returns a weekend date, so it is safe to use as a promised delivery date.

Need a non-Saturday/Sunday weekend? WORKDAY.INTL accepts the same codes as NETWORKDAYS.INTL.

If the cell shows a five-digit number, it is still formatted as General — apply a date format to the result.

5Calendar Days, Working Days, and the Reverse-Date Trap

DAYS(end_date, start_date) returns elapsed calendar days and excludes the start date; NETWORKDAYS includes both working endpoints and ignores weekends. Neither is more correct — they answer different questions, and mixing them up is why a timesheet and a project plan can disagree about the same month.

1

Watch the argument order

Put the end date before the start date and the count turns negative, which quietly corrupts any total it feeds.

=NETWORKDAYS(B2,A2)
2

Working days elapsed so far

TODAY() as the end date keeps the number current, and it recalculates on every edit.

=NETWORKDAYS(A2,TODAY())
3

Working days in a whole month

First and last day of the month avoids the 30-versus-31 drift you get from multiplying by an average.

=NETWORKDAYS(DATE(2026,1,1),DATE(2026,1,31))

Example

=DAYS(B2,A2)
Result: 25

30 January minus 5 January is 25 calendar days, while NETWORKDAYS on the same cells returns 20. The five-day gap is the six weekend days, less the extra day NETWORKDAYS adds by counting the start date.

NETWORKDAYS(B2,A2) for 30 January back to 5 January returns −20; wrap it in ABS() if you only want the distance.

January 2026 has 22 working days, dropping to 20 once New Year's Day and MLK Day are excluded.

If the result appears as a date, the cell inherited a date format — set it back to General or Number.

Google Sheets provides NETWORKDAYS, NETWORKDAYS.INTL, WORKDAY and WORKDAY.INTL with identical syntax and codes.

Functions Used

Related Guides

Summary

NETWORKDAYS counts weekday workdays between two dates with both endpoints included, and its third argument removes a holiday list in one step. Switch to NETWORKDAYS.INTL when the weekend is not Saturday and Sunday, and use WORKDAY when you need the date a given number of working days away. Keep DAYS for calendar elapsed time, and watch the argument order — reversed dates return a negative count.

Next Steps

  • Build a holiday range for your own country and add it to every NETWORKDAYS formula on your timesheet
  • Try NETWORKDAYS.INTL with code 11 or a "0000111" pattern if your team works a four-day or six-day week
  • Replace a hand-counted SLA date with WORKDAY(start, days, holidays) and compare the two