Spell Toolkit

Working Days Calculator

Count working days between two dates, or find the date a number of working days away. Set your own working week and holidays — or paste a whole column of dates and sort it out at once. Nothing you type leaves your browser.

  1. 1. Pick your datesor paste a column
  2. 2. Set your working weekand any holidays
  3. 3. Take the answeror the formula for it
What are you working out?
Your working week
Holidays and other options
Which end dates count

Both ticked is what NETWORKDAYS does, and is the usual reading of “how many days did we work”. Untick both for “how many days in between”.

Result

Pick two dates and the answer appears here.

What this does

Three things, which are really the same piece of arithmetic asked three ways. How many working days lie between two dates. What date falls a given number of working days from another — a payment term, a notice period, an SLA. And, for a column of dates pasted out of a spreadsheet, which of them are working days, and where each one lands once you move it.

It was built for the moment a deadline has to be defensible: not “about three weeks” but a specific date, arrived at by a rule you can state out loud to whoever asks.

How to use it

  1. Choose what you are working out — the gap between two dates, a date a number of working days away, or a whole pasted column.
  2. Set your working week. Monday to Friday is the default, and there are presets for the common alternatives.
  3. Paste any holidays you want excluded, one date per line. A second column of names is ignored.
  4. Take the answer, or copy the equivalent spreadsheet formula if you need it more than once.

A worked example

Say a contract runs from Monday 21 December 2026 to Friday 8 January 2027 and you need to know how many working days that actually is. Nineteen calendar days; four of them fall on weekends; Christmas Day, the 28th and New Year’s Day are holidays. The answer is twelve working days, not the nineteen a calendar count gives — a difference of a week and a half of someone’s time. The Try an example button above loads exactly this.

Now the same question in bulk. You have a column of invoice due dates copied out of Sheets and you want the ones landing on a weekend, so they can be moved. Paste the range, pick the date column, and choose Keep only → Weekend days only. Or choose Roll onto a working day and get the whole column back with every weekend date moved to the following Monday and everything else untouched.

Assumptions and edge cases

Anything that decides whether a day counts is a judgement call, so here is every one this tool makes.

Which end dates count
Both, by default — Monday to Friday is 5 working days. This matches NETWORKDAYS in Sheets and Excel. Untick either end to get the other conventions, and the line under the result always says which rule produced the number.
Adding working days
The starting date is never counted, whether or not it is itself a working day. One working day from Friday and one working day from the Saturday after it both land on Monday. This matches WORKDAY. A negative number counts backwards; zero returns the date unchanged.
A backwards range
If the end date is before the start date, the count is reported as a positive number with a note, rather than as a negative one. Switching off 'count the start date' drops the date you called the start — which in a backwards range is the later of the two.
What 'weekend' means
Whatever your working week says it is. On a Sunday–Thursday week, Friday and Saturday are the weekend and Sunday is a working day. The weekend count never includes holidays; those are counted separately, so the two numbers never double up.
Holidays on a weekend
Change nothing, and are not reported as excluded. A holiday can only remove a day that was going to be worked. There is no observed-date shifting — if your holiday moves to the following Monday, list the Monday.
Public holidays
Not built in, for any country. The holiday box is the whole mechanism, and an empty box means only your working week is applied. This is a real limitation rather than an oversight: doing it properly means observed dates, regional and state variation, and substitute days, and a half-done version of that is worse than none.
Day-first or month-first
Decided from the column, not from your browser's language. One row that can only be read one way — anything with a component above 12 — settles the reading for every ambiguous row in the column. If nothing settles it, day-first is used and the number of affected rows is shown with a switch. If two rows settle it opposite ways, the column is flagged as mixed and the contradicting rows are left out rather than guessed at.
Two-digit years
00 to 68 is read as 2000–2068, and 69 to 99 as 1969–1999. This is the standard pivot, so a value written by a system using two-digit years reads back the way it was written.
Spreadsheet serial numbers
A bare number between 20,000 and 80,000 is read as an Excel or Sheets date serial, counting from 30 December 1899 — so 46233 is 30 July 2026. Outside that window a number is not treated as a date at all, which keeps a column of small integers from becoming dates in 1900 and a bare year from becoming a date in 1905.
Times
Discarded. A date with a timestamp on it is read as that whole day. Since everything here is whole-day arithmetic, there is no hour left for a timezone to move.
Daylight saving
Cannot affect any result. Dates are converted to whole-day integers before anything is calculated, so no clock change, timezone or leap second reaches the arithmetic. The engine is tested against every day from 1900 to 2100.
What comes back from a filtered column
Your own text, exactly as you pasted it, so it goes back into the sheet it came from unchanged. Shifted and rolled dates are returned as ISO (2026-07-30) instead, because they are new values rather than yours.
An impossible working week
If no days are ticked, nothing is a working day: counts come back as zero and asking for a date a number of working days away reports that no such date exists, rather than looping or inventing one.

Questions

Does it count the first and last day?
Both, by default — which is the same rule Google Sheets and Excel use for NETWORKDAYS, and the usual reading of 'how many days did we work'. Monday to Friday is therefore 5, not 4. This is the single biggest reason two calculators disagree, and most of them never say which rule they used. Two tick boxes under 'Holidays and other options' let you drop either end, and the line under the result always restates which rule produced the number you are looking at.
Are public holidays included?
Not yet, and the tool does not pretend otherwise. There is no built-in holiday data for any country, so out of the box it counts your working week and nothing else. Paste your own dates into the holidays box — one per line — and they are excluded. A second column of holiday names is ignored, so you can paste a holiday table straight out of a spreadsheet without stripping it first. Real country-by-country holiday data is a large piece of work with genuine edge cases (observed dates when a holiday falls on a weekend, regional and state holidays, substitute days) and it will ship when it can be done properly rather than approximately.
My working week isn't Monday to Friday.
Then change it. There are presets for Monday–Friday, Sunday–Thursday (Saudi Arabia, Egypt, Kuwait, Qatar and neighbours), Monday–Saturday and a four-day Monday–Thursday, plus seven tick boxes for anything else. This matters more than it looks: over a fortnight, a Sunday–Thursday week and a Monday–Friday week can differ by a whole working day, so a tool hard-coded to Monday–Friday is not slightly wrong for much of the world, it is wrong by a day.
I pasted a column of dates and it says they're ambiguous. What does that mean?
03/04/2026 is the 3rd of April in most of the world and the 4th of March in the United States, and a pasted column carries nothing to say which. Rather than guessing from your browser's language, this tool reads the whole column and looks for a row that settles it — 25/12/2026 can only be day-first, because there is no 25th month. One such row fixes the reading for every other row. If nothing settles it, the tool tells you how many rows are affected, says it is reading them day-first, and gives you a one-click switch. If one row proves day-first and another proves month-first, that is a mixed export rather than a format, and it says so instead of parsing half of it wrongly.
It read a column of numbers like 46233 as dates. Why?
That is how Excel and Google Sheets store dates internally — as a count of days from the 30th of December 1899 — and a column that lost its formatting on the way out of a system arrives looking exactly like that. 46233 is the 30th of July 2026. Only numbers between 20,000 and 80,000 are read this way, which spans 1954 to 2119; that window is deliberate, so a column of small integers is not silently turned into dates in January 1900, and a bare year like 2026 is not turned into a date in 1905.
Is my data uploaded anywhere?
No. Everything runs inside your browser tab using JavaScript. There is no server to send it to — this site is static files only, with no backend and no database. You can confirm it by opening your browser's network tab: nothing is sent while you work. That also means the tool keeps working if you go offline after the page loads, which is the easiest way to prove it.
Why is there a spreadsheet formula under the answer?
Because if you need this answer more than once, a formula in your own sheet beats coming back here. The tool generates the matching NETWORKDAYS.INTL or WORKDAY.INTL call, including the weekend mask for the working week you picked — that mask is a seven-character string starting on Monday where 1 means a non-working day, which is fiddly enough to get wrong by hand. If you have switched off one of the end dates, the formula is written over the adjusted range so it returns the same number shown above it rather than quietly disagreeing.
Does daylight saving affect the count?
No, and that is deliberate. Many date calculators subtract two timestamps and divide by the number of milliseconds in a day, which breaks twice a year: a week containing a clock change is 23 or 25 hours longer than seven days, so the division returns something like 6.958 and rounds inconsistently. This tool never uses a clock at all. Every date is converted to a whole-day integer before anything is calculated, so the answers are identical in Auckland, London and Los Angeles.

If this one is missing something you need, tell us — early feedback shapes what gets built next, and which countries’ holidays get done first.