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.
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))Compare with plain subtraction
The difference excludes the start date and ignores weekends entirely.
=B2-A2Example
=NETWORKDAYS(A2,B2)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.
Point at a named range
One definition means next year's dates update every formula without editing any of them.
=NETWORKDAYS(A2,B2,Holidays)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)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.
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)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)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.
Forward without holidays
Ten working days after 5 January is Monday 19 January.
=WORKDAY(A2,10)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)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.
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)Working days elapsed so far
TODAY() as the end date keeps the number current, and it recalculates on every edit.
=NETWORKDAYS(A2,TODAY())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)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
NETWORKDAYS
NETWORKDAYS counts the number of working days between two dates, inclusive of both endpoints, skipping Saturdays and Sundays and optionally a list of holidays.
WORKDAY
WORKDAY returns the date that is a given number of working days before or after a start date, skipping Saturdays and Sundays and optionally a list of holidays.
NETWORKDAYS.INTL
NETWORKDAYS.INTL counts the number of working days between two dates with a customizable weekend (a weekend code or a 7-character string) and optional holidays; both endpoints are included.
DAYS
DAYS returns the number of days between two dates by subtracting the start date from the end date; note that the argument order is (end_date, start_date).
TODAY
TODAY returns the current date, updated each time the worksheet recalculates.
Related Guides
Calculate Days Between Two Dates
Calculate days between two dates in Excel and Google Sheets with DAYS, DATEDIF, and NETWORKDAYS. Learn which formula counts total, working, or elapsed days and how to skip weekends.
Last Day of Month
EOMONTH returns the last day of month for any date in Excel and Google Sheets. Build month-end ranges, count days per month and avoid leap-year date bugs.
IFS Function with Multiple Conditions in Excel
The IFS function multiple conditions pattern replaces stacked nested IFs. Learn argument order, AND/OR tests, TRUE fallbacks and how to fix the #N/A error.
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