Smekys
Ad Space

Random Date Generator

Free random date generator picks a uniform random day between any two dates. See day count, midpoint, and weekend odds before you draw.

Enter Values

year

Four-digit year of the earliest eligible date (e.g. 2026).

month

1 = January … 12 = December.

day

Day of month (clamped to real month length).

year

Four-digit year of the latest eligible date (e.g. 2026).

month

1 = January … 12 = December.

day

Day of month (clamped to real month length).

0 = include Sat/Sun; 1 = draw weekdays only.

draws

Independent draws; range odds do not change with this count.

Result

Range Midpoint Date (illustrative)
July 2, 2026
Days in Range
365
Eligible Pool Size
365
Weekend Days in Range
104
First Eligible Date
January 1, 2026
Midpoint Date
July 2, 2026
Last Eligible Date
December 31, 2026
Chance of Weekend Draw
28.5%
Chance of Weekday Draw
71.5%

Picking a date sounds trivial until you actually need one. You might be planning a secret Santa, scheduling a contest winner's anniversary, seeding a research simulation, choosing a test appointment, or settling a debate without playing favorites. This random date generator from Smekys takes any start and end date, builds the complete inclusive pool of days between them, and reports the pool's statistics: the day count, the center (midpoint) day of the range, and the share of days that fall on a Saturday or Sunday.

An honest note up front: the calculation engine on this page is pure arithmetic and has no random-number generator, so the date it displays is the deterministic midpoint of your range — not a fresh draw of a truly random day. Use the midpoint and the weekday percentages to size and sanity-check your pool; for a genuine uniform draw, pair this page with a client-side pick such as JavaScript Math.random() (offset = floor(Math.random() × N)), which maps straight onto the day numbering below.

The result card shows you the statistics of the range: how many days are in the pool, the exact midpoint date (rendered as YYYY-MM-DD, e.g. 2026-07-02), and the percentage of days that fall on a Saturday or Sunday. That lets you sanity-check your setup — for example, a full calendar year contains 365 days and roughly 28.49% of them fall on a weekend.

How to Use

  1. Enter the Start Year, Start Month, and Start Day for the earliest date your random pick is allowed to land on. Month uses 1 = January through 12 = December.
  2. Enter the End Year, End Month, and End Day for the latest allowed date. Both endpoints are included in the pool, so a range from January 1 to January 3 has three possible days: the 1st, the 2nd, and the 3rd.
  3. Toggle Exclude Weekends to 1 if you only want Monday through Friday to be eligible (useful for business scheduling). Leave it at 0 to include Saturdays and Sundays.
  4. Set Number of Dates to how many independent draws you want. The statistical odds on the result card do not change when you raise this count — they describe the pool, not any particular draw.
  5. Read the result card: the midpoint date, the pool size, and the weekday/weekend shares. Because the engine has no random-number source, the date it prints is the center of your range rather than a shuffled pick — treat it as a pool sanity check, and use Math.random() on your own page for a true uniform draw.

The engine validates every input first: a year below 1, a month outside 1–12, a day that does not exist in that month (for example February 30), or an end date earlier than the start date all produce a clear error instead of a nonsense result.

How the Pool Is Analyzed

The math is deliberately simple and exact. Given an inclusive range that spans N days, the days are treated as numbered positions 0, 1, 2, …, N−1.

  • N = (end − start).days + 1, because both the start and end days count as eligible.
  • Midpoint = start + floor(N / 2) days — the center day of the inclusive pool. For an even number of days there are two middle days; this calculator shows the later one.
  • Weekend days are counted by stepping from the start date's day-of-week to the next Saturday and Sunday, then dividing by 7 across the whole range.
  • Weekend share = weekend days in range ÷ N × 100%. When Exclude Weekends is on, this collapses to 0% by design.

The day-of-week offset for a Saturday is (5 − dow) + 7 × clamp(dow − 5, 0, 6) where dow is the Julian day number mod 7 (0 = Monday). The Sunday offset is computed the same way with (6 − dow). This lets the engine count weekend days in closed form without loops.

Examples

Example 1 — Drawing a random day in 2026. Set the start to 2026-01-01 and the end to 2026-12-31, leave Exclude Weekends at 0, and draw. The pool contains N = 365 days (eligible pool = 365 since no exclusion), the midpoint lands on 2026-07-02 (Julian day 2461224), and 104 of those days are Saturdays or Sundays. That gives a weekend share of 104 ÷ 365 × 100 = 28.5% and a weekday share of 71.5%. If you then draw uniformly (for example with offset = floor(Math.random() × 365)), expect about 285 weekend dates and 715 weekday dates across 1,000 draws, with natural scatter around those averages. The date printed on the card itself is the midpoint 2026-07-02, not a shuffled pick.

Example 2 — A one-week business window with weekends excluded. For a meeting scheduler you set July 1 through July 7, 2026 (2026-07-01 to 2026-07-07), and flip Exclude Weekends to 1. The raw span is 7 days with a midpoint of 2026-07-04 (Saturday). There are 2 weekend days (July 4 Saturday and July 5 Sunday), so the eligible pool shrinks to 5 weekdays (July 1–3 and July 6–7). The reported weekend probability becomes 0.0% and weekday probability 100.0% by design.

Example 3 — A single Saturday. If both start and end are set to 2026-07-04, the pool is exactly one day. N = 1, the midpoint is 2026-07-04 itself, weekend days = 1, and the weekend probability is 100.0% — there is literally nowhere else to draw. A single Sunday (2026-07-05) behaves the same way, which confirms the day-of-week stepping correctly catches a Sunday at offset 0 rather than waiting a full week.

Example 4 — Sizing a simulation. Researchers and QA teams often need thousands of random timestamps. Set Number of Dates to 100,000 or even 1,000,000 over a multi-year range; the pool statistics stay exact in closed form, and a client-side uniform pick gives every day a long-run frequency of exactly 1 ÷ N, converging to the theoretical share within a fraction of a percent.

Why Uniform Matters

When people pick a "random" date by hand, they almost always cluster around familiar anchors: the 1st of the month, paydays, Friday nights, or holiday-adjacent weeks. That human bias is exactly what makes hand-picked draws feel rigged. A uniform integer draw removes it — every calendar day in your window, including awkward middle-of-Tuesday dates, carries identical weight. For contest drawings, research sampling, or anything where fairness is the point, that property is the whole reason to use a tool instead of guessing.

FAQ

What does "inclusive range" mean here?

Both the start date and the end date are eligible to be drawn. A range from January 1 to January 2 contains exactly two days, not one. This is why the day count formula adds 1 to the raw day difference.

Can I generate more than one random date at once?

Yes. Set the Number of Dates field to any integer from 1 upward. Each draw is independent — getting the same date twice in a row is possible, just as rolling a die can repeat. The range statistics on the result card describe the pool, not any single draw.

How do I exclude weekends or holidays?

Set Exclude Weekends to 1 to remove Saturdays and Sundays from the pool. US federal holidays, company holidays, and other custom blackout days are not automatically removed — if you need those excluded, split your range into segments that skip the blocked days.

Is this really random and fair?

The pool statistics are exact, but this page does not itself produce a random date: the calculation engine is pure arithmetic with no random-number source, so the date it shows is the deterministic midpoint of your range. For a genuine uniform draw, take the day count N from the card and pick offset = floor(Math.random() × N) in your browser — then the chosen date is start + offset days, and every eligible date has equal probability 1 ÷ N.

What happens if my end date is before my start date?

The calculator rejects it with a clear error. Swap the two dates so the earlier one is the start and the later one is the end; the engine also validates that months are 1–12 and that days actually exist in their month.

Which date is the midpoint, and why does it matter?

The midpoint is start + floor(N / 2) days — the center day of the inclusive pool. For a 365-day 2026 range it is 2026-07-02. It is a useful sanity check: if the midpoint the card shows is not roughly where you expected, you probably entered the wrong start or end year.

How are probabilities rounded?

All probabilities are rounded to one decimal place. For example, 104 ÷ 365 × 100 = 28.493…% displays as 28.5%, and 2 ÷ 7 × 100 = 28.571…% displays as 28.6%. When Exclude Weekends is on, the weekend probability rounds to exactly 0.0% because the numerator becomes zero.

Disclaimer

This random date generator is provided for informational purposes only by Smekys and is not intended for gambling, legal, financial, or mission-critical decisions. Generated dates are produced by a deterministic, uniform algorithm and should be treated as illustrative. Always independently verify dates, deadlines, and official schedules against authoritative sources before acting on them.

Related Calculators

Disclaimer

Results are estimates for illustration only. Verify important figures independently.