Formatea fechas en JavaScript sin librerías: un generador de Intl.DateTimeFormat en vivo, código para YYYY-MM-DD y MM/DD/YYYY, zonas horarias, tiempo relativo, rangos y las trampas de parseo que causan errores de un día.
Para formatear una fecha en JavaScript, usa Intl.DateTimeFormat o toLocaleDateString con un locale y opciones, por ejemplo date.toLocaleDateString("en-US", { dateStyle: "long" }) para March 5, 2026. Usa toISOString() para las APIs, la opción timeZone para mostrar otra zona e Intl.RelativeTimeFormat para frases como hace 3 días.
Respuestas rápidas
Elige un locale y opciones en el generador y copia el código que escribe; la vista previa la formatea tu propio navegador. Debajo, una tabla de formatos habituales y ejemplos ejecutables para zonas horarias, tiempo relativo y rangos.
Usa el año local, el mes más uno y el día, rellenados con padStart(2, "0"), y únelos con guiones. toISOString().slice(0, 10) también da esa forma, pero en UTC, así que puede mostrar el día equivocado cerca de la medianoche.
new Date("2026-03-05") se interpreta como medianoche UTC. Al oeste de Greenwich, ese momento todavía es el día 4 en hora local. Parsea con una hora ("2026-03-05T00:00") o con new Date(2026, 2, 5) para obtener la medianoche local.
No para formatear. Intl cubre locales, zonas horarias y tiempo relativo en todos los navegadores modernos. Los propios mantenedores de Moment lo describen como un proyecto heredado; para cálculos con fechas, funciona bien una librería pequeña como date-fns o la API Temporal más reciente (donde esté disponible).
Pasa timeZone con un nombre IANA, por ejemplo { timeZone: "America/New_York", timeStyle: "short" }. El objeto Date sigue siendo el mismo instante; solo cambia cómo se escribe.
Formatos habituales y el código de cada uno
Una cadena ISO solo con fecha se interpreta como medianoche UTC, pero una cadena de fecha y hora sin desfase se interpreta como hora local. Esa diferencia causa la mayoría de los errores de un día.
Constrúyelo a partir de las partes locales con padStart. El truco del locale en-CA da el mismo resultado, pero depende de que el formato de ese locale no cambie.
timeZone acepta un nombre IANA. El Date en sí no tiene zona; solo cambia el formato. Ten en cuenta que timeZoneName no se puede combinar con dateStyle ni timeStyle.
Intl.RelativeTimeFormat escribe las palabras; tú eliges la unidad. Este helper elige la unidad más grande que encaja.
formatRange elimina las partes repetidas, así que una reserva del 5 al 9 del mismo mes se lee de forma natural.
Cuando ningún estilo predefinido encaja, toma las piezas localizadas y ordénalas tú, por ejemplo para mostrar el día más grande que el mes.
¿Trabajas con segundos epoch? Usa el
Opciones de Intl.DateTimeFormat usadas en el generador
(ninguna)
(tu zona)
Error: {msg}
Fecha y hora
Locale
Zona horaria
Modo
Estilos predefinidos
Elegir cada parte
Copiar código
Empieza gratis · Sin tarjeta de crédito