Para trabajar con fechas en JavaScript puedes utilizar Date para representar un instante e Intl.DateTimeFormat para mostrarlo con el idioma y la zona horaria apropiados. Separar el valor almacenado de su presentación evita muchos errores.
Una fecha de cumpleaños, una hora de una cita y un instante de publicación no son exactamente el mismo tipo de dato. Antes de elegir formato, decide qué necesitas conservar.
Cómo obtener la fecha actual
const ahora = new Date();
console.log(ahora.getFullYear());
console.log(ahora.getMonth() + 1);
console.log(ahora.getDate());GetMonth devuelve un índice de 0 a 11; por eso se suma uno al mostrar el número de mes. GetDate devuelve el día del mes, mientras que getDay devuelve el día de la semana.
Cómo crear una fecha sin confundir los meses
const fechaLocal = new Date(2026, 10, 3, 15, 30);
console.log(fechaLocal.getMonth()); // 10: noviembre
const instante = new Date("2026-11-03T15:30:00Z");
console.log(instante.toISOString()); // 2026-11-03T15:30:00.000ZEl constructor numérico del primer ejemplo utiliza la zona local del entorno. La Z del segundo indica UTC. No son necesariamente el mismo instante.
Mostrar una fecha en español y en una zona concreta
const instante = new Date("2026-11-03T15:30:00Z");
const formato = new Intl.DateTimeFormat("es-ES", {
dateStyle: "long",
timeStyle: "short",
timeZone: "Europe/Madrid"
});
console.log(formato.format(instante));La opción timeZone evita depender de la zona del dispositivo para esta presentación. La puntuación y ciertos detalles pueden variar según los datos lingüísticos del entorno: no compares el texto formateado como si fuera un identificador estable.
Evita cadenas de fecha ambiguas
No dependas de interpretar textos como 03/11/2026: el formato puede ser ambiguo o no admitirse de la misma manera. Prefiere un formato definido y conserva explícitamente los datos necesarios.
Una cadena de fecha sin hora, como 2026-11-03, tiene reglas de interpretación que pueden producir cambios de día al mostrarla en otra zona. Si estás gestionando una fecha de calendario sin hora, evita tratarla despreocupadamente como un instante UTC.
Cómo comprobar si una fecha es válida
const fecha = new Date("texto incorrecto");
console.log(Number.isNaN(fecha.getTime())); // trueEsto detecta una representación inválida, pero no valida por sí solo todos los datos de negocio. El constructor puede normalizar componentes fuera de rango; si el usuario introduce un día imposible, verifica también los componentes originales y las reglas de tu formulario.
Comparar instantes y calcular una duración
const inicio = new Date("2026-11-03T10:00:00Z");
const fin = new Date("2026-11-03T11:30:00Z");
const minutos = (fin.getTime() - inicio.getTime()) / 60000;
console.log(minutos); // 90La resta calcula tiempo transcurrido. Sumar 24 horas en milisegundos no equivale siempre a avanzar un día de calendario en una zona con cambios de horario. Para agendas y reglas complejas de calendario necesitas una estrategia que contemple esa diferencia.
Preguntas frecuentes
¿Date almacena Europe/Madrid dentro del objeto?
No. El objeto representa un valor temporal; la zona interviene al interpretar componentes locales o al formatear.
¿Cómo guardo una publicación con hora?
Un instante en un formato acordado, como ISO con zona explícita, puede ser adecuado. Confirma el contrato con el servidor.
Si las fechas proceden de campos, consulta cómo validar formularios antes de utilizarlas.
Referencia técnica: documentación de MDN.




