Working-Day Calculator
Count qualifying calendar dates, or move forward/backward by working days. Choose the weekdays that work for you and enter your own excluded dates.
Calculations run in a local browser worker. Dates are not uploaded, logged, saved or put into URLs. Refreshing clears the draft.Choose a calculation
Whole proleptic Gregorian dates, 0001-01-01 through 9999-12-31. Enter canonical YYYY-MM-DD. No local hours, DST or timezone cutoffs are involved.
0 / 102,400 UTF-8 bytes. One canonical YYYY-MM-DD per dated line; no labels, spaces or trailing text. Blank lines are reported/ignored. Calculate parses and deduplicates up to 1000 unique dates. Malformed entries block output; dates outside the current interval are unused, not invalid.
Count intervals: at most 100,000 elapsed calendar days (up to 100,001 included dates). Offsets: 0–10,000 working days. Workers keep traversal off the main thread; changes or Cancel discard obsolete replies.
Working-date counts
Enter dates and rules, then Calculate. Results use only your selected weekdays and entered exceptions.
No automatic national/observed holidays, half-days, shifts, closure hours or timezone-specific cutoffs. Your entered exceptions determine accuracy for your own calendar. Drafts are memory-only; refreshing clears them.
How to calculate working days
- Choose Count between dates or Add / subtract days. Enter canonical YYYY-MM-DD dates, and an unsigned whole-number offset when needed.
- Choose at least one working weekday. Monday–Friday is the default, not a hard-coded weekend rule.
- Enter excluded dates / holidays, one date per line, or add individual dates with the date picker. Blank lines are ignored and reported; dated lines must contain only a canonical date.
- For counting, choose whether to include each endpoint. For offsets, the base date is not consumed and endpoint toggles do not apply.
- Press Calculate. Review the counts, duplicate/unused exception report and complete summary, then copy or download working-day-summary.txt. Changes mark prior results Outdated and disable exports; Cancel discards unfinished work.
Worked example: one week in January
With Monday–Friday selected, 2024-01-01 through 2024-01-07 inclusive contains five working dates and two excluded weekdays. Enter 2024-01-01 as an exception: the result is four working dates, two excluded weekdays and one excluded holiday.
Adding Sunday 2024-01-07 as another exception does not reduce the count again, because Sunday is already excluded as a nonworking weekday. A date such as 2024-02-01 is valid but unused for this interval. Repeated 2024-01-01 entries are reported and counted only once.
Whole-date rules and endpoints
The proleptic Gregorian calendar is supported from 0001-01-01 to 9999-12-31, including leap-year rules before historical local adoption. Validated UTC calendar fields are converted to integer date indexes; traversal does not measure elapsed local hours, so daylight-saving changes do not affect results. Nonexistent dates, noncanonical forms, reversed intervals and over-limit spans are rejected without rollover or truncation. Swap exchanges dates only, retaining endpoint selections.
Each included date is classified once: first as an unselected weekday, otherwise as an entered holiday, otherwise as working. Included calendar dates always equal working dates plus excluded weekdays plus excluded holidays. When start equals end, the one date is included only if both endpoint toggles are on; either toggle off makes the interval empty.
Adding and subtracting
The base is not the first consumed working day, and a holiday on the base does not shift it before traversal. Friday 2024-01-05 plus one working day reaches Monday 2024-01-08 with default rules; if Monday is excluded, it reaches Tuesday 2024-01-09. Monday 2024-01-08 minus one reaches Friday 2024-01-05.
A zero offset returns the base unchanged even on a Saturday or entered holiday. Positive offsets consume qualifying dates strictly after the base; subtraction consumes them strictly before it. Traversed calendar days equal consumed working days plus skipped weekdays and holidays. Leaving supported years returns an error, not a partial date.
Your exceptions, not an official holiday calendar
Up to 1000 unique exceptions are parsed strictly and deduplicated in first-entry order. CRLF, LF and CR line separators are accepted; a terminal separator adds no extra line. A malformed dated line, surrounding spaces, labels or trailing comments block the whole calculation rather than being silently skipped. Completely blank/whitespace-only lines are counted as ignored blanks.
The report distinguishes holidays excluded on selected weekdays, dates already excluded as nonworking weekdays, and unused dates outside the actually included/traversed interval. This includes excluded endpoints and the unconsumed base. The table shows the first 50 unique entries; the selectable summary and download include every accepted unique exception and duplicate/blank-line counts.
Limits, recovery and limitations
Excluded-date input is limited to 100 KiB UTF-8. A count interval can span at most 100,000 elapsed calendar days (end minus start), allowing up to 100,001 included dates. Offsets are limited to 10,000 working days. Local workers keep long traversal off the main thread; cancellation and revision guards reject stale worker and clipboard replies and release workers/download URLs.
Clear excluded dates, Swap, example and Clear / Reset offer one-step in-memory Undo. Undo restores inputs and rules, not a falsely current output; Calculate again. Errors preserve entered text. Clipboard denial leaves the complete selectable summary for manual copying. Drafts are not persisted or uploaded.
Accuracy depends on the exceptions you enter for your own calendar. No country presets, holiday APIs or automatic statutory observed-holiday inference are provided. This does not handle half-days, shifts, local closure hours, employment law or timezone-specific cutoff times, and is not an authoritative deadline service.
How was this tool?
Help us improve Working-day calculator.
Opens your email app; you send it there. No email app? Copy your comment and email feedback@tooltulip.com.
Don't include sensitive data.
0/300