The Random Date Generator can generate up to 1,000 uniformly sampled calendar dates entirely in your browser.
Set an inclusive start and end date, choose a count from 1 to 1,000, and decide whether repeats are allowed. Results use YYYY-MM-DD format, and neither the selected range nor the generated list is uploaded to Lizely.

Start with a browser-based workflow
For ordinary utility work, open the Random Date Generator. choose two dates, enter the number of results, set the repeat option, and generate. The calculation runs entirely in your browser, and neither the selected date range nor the generated list is uploaded to Lizely.
The output is deliberately limited to civil calendar dates. That makes it suitable for sample data, prompts, and demonstrations where a date alone is the required value. It does not add a time of day or a timezone offset, and it does not make scheduling, legal, or business-day decisions.
Generate a date list in four steps
Use this workflow whenever the range and number of picks are already known:
- Enter the start and end dates in strict YYYY-MM-DD form. The start must be on or before the end, and both endpoints are included in the selection pool.
- Enter a count from 1 to 1,000 and choose whether the same date may appear more than once. The repeat setting determines how the list is sampled.
- Select Generate. The tool draws the requested dates and displays them as a list in stable YYYY-MM-DD format.
- Verify the displayed range and count, then copy or record the values you need. Check that every date falls within the selected endpoints and that the list contains the requested number of results.
Editing either endpoint, changing the count, or toggling duplicate mode clears the old list and any prior error. This prevents results from earlier settings from remaining on screen as though they matched the current controls. A blank, fractional, zero, negative, or greater-than-1,000 count produces a clear allowed-range error rather than a truncated list.
Pick the repeat rule for the draw
The duplicate setting changes the selection method, not merely the display. Choose it according to whether repeated dates are acceptable for your task.
| Setting | Selection method | Expected result | Limit |
|---|---|---|---|
| Duplicates allowed | Each requested draw samples independently from the full inclusive range. | The same date can appear more than once. | Counts from 1 to 1,000 are supported, including repeats from a one-day range. |
| Duplicates disabled | Dates are sampled without replacement through a sparse partial Fisher-Yates selection. | Every returned date is distinct within that run. | The count cannot exceed the number of eligible dates; an oversized request produces an error. |
A one-day range is valid and always returns that date. If the requested list needs that date more than once, duplicate mode must be enabled. With duplicates disabled, the tool never responds by returning fewer dates than requested or quietly allowing repeats.
Uniform sampling means every eligible date has the same selection opportunity. It does not guarantee that one particular run will look evenly spaced, and duplicate-enabled draws can legitimately repeat or cluster around one date.
Accept only valid calendar dates
The generator accepts strict YYYY-MM-DD civil dates from 0001-01-01 through 9999-12-31. Invalid input is reported instead of being silently repaired. Years 0001 through 0099 remain literal years and are not shifted into the twentieth century.
Leap-day validation follows the Gregorian behavior implemented by ECMAScript Date objects. February 29 is valid for 2000 and 2024, but not for 1900 or 2023. Month and day overflow is also rejected: an entry such as 2025-04-31 is not allowed to roll silently into May.
The start date cannot be after the end date. These checks occur before sampling, so an invalid range or count does not produce a partial result. Once the inputs are valid, both endpoints remain eligible for selection.
Keep dates stable across clock changes
The generator treats each date as a UTC calendar-day ordinal rather than a local midnight plus a fixed number of hours. A strict date is validated by setting its year, month, and day on a UTC Date object and reading the components back. Its UTC millisecond value is then divided by exactly 86,400,000 to obtain an integer day position relative to 1970-01-01.
Sampling happens on those integer positions, and selected positions are formatted back with UTC getters. This avoids the common daylight-saving bug in which adding 24 local hours lands at 23:00 or 01:00, skips a displayed date, or repeats one near a clock transition.
The final list still contains dates only. It has no time of day or timezone offset beyond the internal UTC-based method used to preserve each calendar day.
Make the selection fair and transparent
Randomness comes from the browser's Web Crypto getRandomValues method, which supplies unsigned 32-bit words. The tool does not use Math.random().
Applying raw modulo can give some dates one extra possible source value when the range size does not divide 2^32. To remove that modulo bias, the tool uses rejection sampling: it accepts only the largest leading interval whose size is an exact multiple of the number of available dates, then applies modulo. Each accepted date position therefore has the same number of underlying 32-bit values.
In no-duplicate mode, a sparse partial Fisher-Yates selection removes previously selected positions without allocating an array for every day in a multi-million-day range. A bounded safety guard reports a failed random source if it repeatedly receives values in the rejected tail.
The Web Crypto path is intentionally not seedable through this interface. For reproducible software tests, store the resulting dates or use your own seeded test generator. Equal probability also does not mean that a particular random run will appear evenly distributed.
Check the limits before using a result
Generated dates work well for test fixtures, writing prompts, sample schedules, randomized exercises, demonstrations, and other non-authoritative data. They are not predictions, appointment bookings, legal deadline calculations, business-day calendars, holiday calendars, timezone converters, or timestamp generators.
The generator also does not automatically apply these scheduling constraints:
- Weekends and public holidays
- Historical calendar transitions
- Unavailable booking days
- Organization-specific blackout dates
Check those constraints separately before using a generated date in a real process. A date that is valid on the calendar can still be unsuitable for a particular schedule, service, or policy.
If a selection has financial, legal, contest, security, or audit consequences, use a documented procedure with independent oversight and retained evidence. This browser tool provides careful, unbiased sampling for ordinary utility work, but it is not a certified random-draw service.
For a deeper look, see Random IP Generator on Android: Browser Workflow.
For a deeper look, see Random Letter Generator: Free, No Sign-Up.