Generators FIELD NOTES · 4 MIN READ
How Random Dates Get Picked Fairly
A random date is a uniform draw over an inclusive window of days — plus leap-year handling, unique mode, and why ISO format sorts correctly.
A random date is a random integer wearing a calendar. The generator treats your date window as a row of numbered days, draws one number uniformly, and converts the offset back into a real date — which is why the tool never hands you a February 30th, never skips a leap day, and never needs to "try again" when a month runs out.
One uniform number per day, endpoints included
The window is inclusive on both ends. A range from 2026-01-01 to 2026-12-31 spans 364 days from start to end, which means 365 distinct days in the pool — the generator draws an offset from 0 to 364 and adds it to January 1st, so both New Year's Day and New Year's Eve are legitimate picks. That endpoint detail is easy to get wrong in hand-rolled code, where a loop from start to end quietly drops the last day. One real seeded run — seed 42, full-year 2026 — produced 2026-01-01, 2026-07-11, 2026-09-26, 2026-04-07, 2026-05-18: the boundary date itself won the very first draw, which is the inclusivity guarantee caught in the act.
Leap years are somebody else's problem
Because offsets are added to real date objects rather than counted day-by-day, the calendar's irregularities come free: a window spanning February 29, 2028 simply includes it as one of its days, month lengths vary correctly, and crossing year boundaries just works. This is the quiet argument for generating dates from date arithmetic instead of picking a random month (1–12), then a random day (1–31), then throwing away the invalids — the naive approach both wastes draws and skews the result unless the discards are handled exactly right.
Unique mode: with or without replacement
Leave unique off and each draw is independent — the same date can come up twice, which is correct when every pick should stand on its own. Switch it on and the model becomes drawing without replacement: a date, once picked, is removed from the pool, enforced by redrawing any collision. That mode is capped sensibly — you can request up to 1,000 dates, but no more than the window actually contains. If you need one random date per month or per weekday, no single uniform draw gives you that; the move is to run a narrow window once per group. The sampling theory behind both modes is in random sampling explained.
Formats that survive downstream
Output comes in four shapes: ISO (2026-06-13), US (06/13/2026), EU (13/06/2026), and long ("June 13, 2026"). They display the same day but behave very differently downstream: ISO dates sort correctly as plain text — alphabetical order equals chronological order — while the numeric US and EU forms sort into nonsense in a spreadsheet column. If the dates are headed anywhere near a database or a CSV, ISO is the format that won't need fixing later. A seeded run repeats exactly, since the seed drives the underlying integer draws — see how pseudorandom numbers work for why.
What "uniform over days" does and doesn't mean
Uniform per day is not uniform per month or per weekday. Draw over a 90-day window and a month with 31 days genuinely gets more picks than a 28-day neighbor, and a window containing more Mondays yields more Mondays — each day in the pool is equal, but groups of days are not. If you need one date per month or one date per weekday, no single uniform draw over a big window gives you that; instead run one narrow draw per group. That distinction matters for honest sampling: "a random day in Q1" and "a random day from each month of Q1" are different experiments with different answers.
Try it yourself
Draw from any window with the Random Date Generator — set the start and end dates, a count up to 1,000, optionally unique dates, and a seed if you want the run replayable. For the companion overview of random pickers, see random colors, dates, and teams; the raw-integer version of the same idea lives in the Random Number Generator, and generated birthdates can be checked against the Age Calculator.