Genera fechas aleatorias dentro de un año, formatea según idioma y valida rangos. Incluye un ejemplo con selector de idioma y salida en pantalla.
Generar fechas aleatorias con JavaScript

Generar fechas aleatorias es un ejercicio perfecto para practicar números aleatorios, trabajo con rangos y el objeto Date. Además, si lo combinas con Intl.DateTimeFormat, puedes mostrar la fecha en distintos idiomas.

1) Idea: random entre dos timestamps

Una fecha se puede representar como milisegundos desde 1970 (timestamp). Para generar una fecha aleatoria entre dos fechas:

function randomDate(startDate, endDate) {
  const start = startDate.getTime();
  const end = endDate.getTime();
  const rnd = Math.floor(Math.random() * (end - start + 1)) + start;
  return new Date(rnd);
}

2) Fechas aleatorias dentro de un año

const year = 2026;
const inicio = new Date(year, 0, 1);   // 1 enero
const final = new Date(year, 11, 31);  // 31 diciembre

const fechas = Array.from({ length: 5 }, () => randomDate(inicio, final));

3) Formateo por idioma

Con Intl.DateTimeFormat puedes formatear una fecha según locale:

function formatDate(date, locale) {
  return new Intl.DateTimeFormat(locale, {
    weekday: "long",
    year: "numeric",
    month: "long",
    day: "2-digit",
  }).format(date);
}

4) Ejemplo completo con selector de idioma

const select = document.querySelector("#locale");
const salida = document.querySelector("#salida");

function render(locale) {
  const year = new Date().getFullYear();
  const inicio = new Date(year, 0, 1);
  const final = new Date(year, 11, 31);

  const fechas = Array.from({ length: 5 }, () => randomDate(inicio, final));
  salida.innerHTML = fechas
    .map((d) => `<li>${formatDate(d, locale)}</li>`)
    .join("");
}

select.addEventListener("change", (e) => render(e.target.value));
render(select.value);

5) Detalles a vigilar

  • Meses: en new Date(año, mes, día), el mes va de 0 a 11.
  • Zonas horarias: si haces cálculos con horas, puede haber cambios por horario de verano.
  • Formato: para UI, casi siempre conviene Intl.DateTimeFormat en lugar de concatenar strings.