Random Date Generator
Generate random dates between any two dates you pick. Choose the count, output format (ISO, US, EU, long), add times, or limit to weekdays only.
- Free, no account
- No watermark
- No usage limit
About the Random Date Generator
Most random date pickers quietly get the edges wrong, and if you're seeding a test database that's the one place you can't afford it. Two bugs turn up over and over in the free ones. The first is an off-by-one: they draw from your start date up to but not including the end, so if you ask for dates through December 31st, the 31st never shows, and your data has a silent gap at the top of the range. The second is nastier because you never catch it by eye. A lot of tools build each date from the browser's local clock, so a date near midnight slides a day depending on where you are. Someone in Tokyo asks for a random date in January 2020 and every so often gets December 31st back, a date that shouldn't be possible for that request.
This one does the range math in whole calendar days anchored to UTC and only turns them into readable text at the very end, with both endpoints always in play. The range you type is the range you get, whether you're in Berlin or Buenos Aires, and daylight saving never enters into it. Pick a start and end, choose how many, hit Regenerate, and a batch appears in an instant, free, no sign-up, nothing sent anywhere. Formats, random times, and a weekdays-only toggle are here too, and because it runs in your browser it keeps working even if your connection drops after the page loads.
How to use
- Set the start and end date with the pickers or by typing them in. Both are included in the range, so either can turn up in the results. The start has to be on or before the end, and if you flip them the tool says so rather than guessing what you meant.
- Pick a format, ISO (
2020-06-15), US (06/15/2020), EU (15/06/2020), or Long (Mon, Jun 15, 2020). Switching reformats the batch you already have, so you don't have to regenerate. - Add extras if you need them. Tick Include a time of day for a random
HH:MM:SSon each date, or Weekdays only to drop Saturdays and Sundays. Use either, both, or neither. - Choose how many, from 1 to 100, with the minus and plus buttons or by typing a number.
- Press Regenerate for a fresh set. Each press is a new independent draw, so you'll almost never see the same list twice.
- Copy what you need. Click any single date to copy just that one, or Copy all to grab the whole list one date per line, ready to paste into a sheet or a seed script.
The list always comes back sorted oldest to newest, so it reads in order whether you asked for three dates or ninety.
Seeding a test database that doesn't look fake
The main reason people land here is test data, and it's worth getting right. If you seed every row with the same hard-coded 2024-01-01, your app looks fine and lies to you. Sort-by-date never gets exercised, because every date is identical. A range filter passes on data it could never fail. Feed it a spread of random dates across the window you actually care about, drop them into your fixtures or seed script, and those code paths finally get tested the way production will hit them.
Turn on Include a time of day when the column is a timestamp, a created-at, an order placed-at, so two records on the same day carry different clock times the way real activity does. Leave it off for a plain date column like a birthday or a due date. And don't be thrown when a narrow range hands you the same date twice. Each date is an independent draw, like rolling dice, so duplicates happen, and that's closer to real data than forcing everything unique, since real users do sign up on the same day. If you need every date distinct, widen the range so it holds more days than the count you asked for.
Beyond test data
The same even spread helps anywhere you need a date you didn't choose. Auditors sample this way, picking a handful of random dates in the period and pulling whatever transactions landed on those days, and because the tool chose the days instead of the auditor, nobody can argue the sample was cherry-picked. Same logic for a giveaway drawn against a date-stamped list, the generator is the impartial referee, so the pick is defensible.
The other common one is spreading things out. Say you want ten social posts across a month without three clumping onto the same day. Generate ten random dates, they come back sorted, and there's your rough schedule, irregular enough that it doesn't read as robotic while still covering the month. Tick Weekdays only when the thing can't land on a weekend, meetings, work deadlines, business-day deliveries. One honest limit: it uses the plain Monday-to-Friday definition and knows nothing about public holidays, which shift by country and year, so a random weekday can still land on Christmas. If that matters, generate the batch and prune the few that hit a holiday you care about.
A quick word on formats
Four output styles, and the only one you really have to get right is ISO, 2020-06-15. That's what you copy for anything a machine reads, a database, a spreadsheet column, a filename, an API, because year-first means it sorts correctly as plain text on its own. US (06/15/2020) and EU (15/06/2020) are the everyday human styles, and the trap is that 06/07 is June 7 in one and July 6 in the other, so never mix them in one sheet and never hand either to code that'll parse it later. Long (Mon, Jun 15, 2020) spells the month out and shows the weekday, no ambiguity at all. Switching is instant, so you can generate once and copy the same batch as ISO for your script and Long for the email.
Frequently asked questions
Is the randomness fair, or could it lean toward some dates?
It's fair. Every pick uses your browser's built-in cryptographic random generator with rejection sampling, the careful way to turn raw random bytes into a number in a range without the slight lean toward the low end a naive modulo trick leaves behind. Every eligible day gets an exactly equal shot. The honest bit: for picking dates, prompts, or test data, this rigor is overkill, plain Math.random would have been fine. It costs nothing to do properly so that's what runs, but don't let any tool sell you "military-grade randomness" as if it makes a random birthday more random. Where fairness genuinely matters is a draw you might have to defend, and even there the generator is rarely the weak link, how you use the output is.
Do the same settings always give me the same dates? Can I set a seed?
No, and there's no seed option. Every press of Regenerate is a completely fresh draw, so the same start, end, and count keep handing you different batches. That's what you want for almost everything, a new random set rather than the same one on repeat. If you need a reproducible sequence for a test that has to match run after run, this isn't the tool for it, you'd want a seeded generator in your own code. Here, refreshing the page or hitting Regenerate wipes the old list and rolls again.
Will UTC make the dates wrong for my time zone?
No, the opposite. The dates here are plain calendar days with no time zone stamped on them, so there's nothing to be off. When you see 2020-06-15, that's the fifteenth, not "the fifteenth in some zone that might roll back to the fourteenth for you." Anchoring the math to UTC is what stops the drift, it keeps a date from sliding across a day boundary the way tools built on your local clock let it. If you turn times on, the HH:MM:SS is just a random clock time pinned to that day, no zone conversion. Read the output as the literal date and time you see.
Can I paste the whole batch straight into a spreadsheet?
Yes, Copy all is built for exactly that, one date per line, which drops down a column in Excel or Google Sheets cleanly, and ISO is the format to pick for it. Pasted ISO dates get recognized as real, sortable dates by most spreadsheet apps, so you can sort and filter right away instead of fighting a column of text that only looks like dates. The other formats paste fine as text but might not be read as dates automatically, depending on your locale settings.
Is anything I generate uploaded or saved?
No. Every random pick and all the date math happen in your browser's memory, and clicking a date only copies it to your own clipboard. No account, no history, no server call, nothing logged or stored anywhere. Close the tab and the list is gone for good. That's also why it keeps running if your internet cuts out after the page loads, once it's open it doesn't need a connection.