Skip to content
AZ Tools

Date Range Splitter

Splits a date range into up to 50 equal slices — for chunked reports, sprint calendars, monthly cohorts, API backfills that cap the window per request, or batch jobs over a long span. The math runs at millisecond precision: the span is divided into N equal parts, then each boundary is snapped to midnight in your local timezone, so the chunks come out as even as whole-day output allows. Intervals mode lists each chunk's start, end, and length in days; Boundaries mode lists just the N+1 cut dates, ready to paste into a query or script. Everything runs in your browser and your inputs are remembered locally. Two semantics worth knowing: with 'Include end date' on, the final day belongs to the last chunk (the natural human reading of "through June 30"); off gives a half-open [start, end) split. And in Intervals mode each chunk's end equals the next chunk's start, so consecutive rows tile the range with no gaps and no double-counted days.

Output:
Splits
  • #12026-08-21 → 2026-11-2091d
  • #22026-11-20 → 2027-02-2092d
  • #32027-02-20 → 2027-05-2291d
  • #42027-05-22 → 2027-08-2292d

Boundaries are snapped to midnight in your local timezone.

How to use

  1. Pick a start date, an end date, and how many intervals you want (1–50).
  2. Choose the output: Intervals shows each chunk as start → end with its length in days; Boundaries shows only the N+1 cut dates.
  3. Toggle 'Include end date' depending on whether the final day should count inside the range (on) or be treated as an exclusive endpoint (off).
  4. Use the Copy button to grab all rows at once — one line per row, ready for a spreadsheet or script.

Frequently asked questions

What if the range doesn't divide evenly?
The split is computed in milliseconds and each boundary is then snapped to local midnight, so some chunks may run a day longer or shorter than others. The rounding is spread across the boundaries rather than dumped on the last chunk, keeping the intervals as balanced as whole-day output allows.
Why would I pick Boundaries over Intervals?
Boundaries are exactly the cut-points you'd feed into a `BETWEEN` clause, a partitioning function, or a loop over date windows — no start/end pairing needed. Intervals is better when a human reads the schedule and wants each chunk's length in days at a glance.
Why does each chunk's end equal the next chunk's start?
The rows follow the half-open convention [start, end): the shared boundary belongs to the later chunk, so no day is counted twice and none falls into a gap. If your report needs inclusive per-chunk end dates instead, subtract one day from each end column after copying.
How are timezones and daylight saving handled?
All dates are interpreted at midnight in your browser's local timezone, and every computed boundary is snapped back to local midnight, so the output is always clean whole dates — never partial days or odd times. A DST transition inside the range shifts the raw millisecond cut by an hour; after snapping, that can at most move a boundary landing near midnight onto the neighbouring day, the same whole-day rounding described above.
Can it split into calendar months or quarters?
No — it divides the span into equal-length slices by elapsed time. Splitting a year into 4 gives ~91-day chunks, which only approximate calendar quarters (Jan–Mar is 90 days, Jul–Sep is 92). For strict calendar periods, list the month or quarter start dates yourself; use this tool when the chunks must be equal.

Related tools