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.DateTimeFormaten lugar de concatenar strings.
