Playground de Date de JavaScript
Escribe una expresión Date de JavaScript y explora cada formato de salida y propiedad en tiempo real — toISOString, toString, getTime, getFullYear y más.
El objeto Date de JavaScript
El objeto Date integrado en JavaScript almacena el tiempo internamente como el número de milisegundos desde el epoch Unix (1 de enero de 1970 00:00:00 UTC). Cada instancia de Date no es más que ese entero. Los distintos métodos —toISOString(), toString(), toLocaleString()— son formas diferentes de mostrar ese mismo valor subyacente.
Errores frecuentes al trabajar con fechas en JavaScript
Varios comportamientos de Date confunden incluso a desarrolladores con experiencia:
- Los meses empiezan en cero: enero es 0 y diciembre es 11; suma siempre 1 al mostrarlos
- new Date('2024-01-01') se interpreta como medianoche UTC; new Date('2024/01/01') como medianoche local
- new Date(2024, 0, 1) crea el 1 de enero de 2024 en hora local (el mes empieza en 0)
- Date.now() devuelve milisegundos; Math.floor(Date.now() / 1000) da segundos Unix
- Evita sumar días añadiendo 86400000 ms: el horario de verano puede dejarlo en la hora equivocada
Trabajar con zonas horarias en JavaScript
El objeto Date de JavaScript no tiene propiedad de zona horaria: siempre se almacena en UTC. Las conversiones de zona horaria se hacen al mostrar, con la API Intl.DateTimeFormat.
- new Intl.DateTimeFormat('en-US', { timeZone: 'Asia/Tokyo', dateStyle: 'full', timeStyle: 'long' }).format(date)
- date.toLocaleString('zh-CN', { timeZone: 'Asia/Shanghai' })
- new Intl.DateTimeFormat('en-CA', { timeZone: tz }).formatToParts(date) — devuelve partes individuales para formato a medida
Cómo leer la salida del playground
El playground muestra varias vistas del mismo valor Date para detectar rápido errores de unidad y zona horaria. Compara primero getTime con los segundos Unix y luego revisa las cadenas ISO y local. Si la fecha ISO es correcta pero la cadena local parece distinta, el timestamp está bien y solo cambió la zona horaria de visualización.
- getTime siempre son milisegundos desde el epoch Unix
- Los segundos Unix son getTime dividido entre 1000 y redondeado hacia abajo
- toISOString siempre muestra UTC con una Z al final
- toString y toLocaleString muestran la zona horaria local del navegador salvo que las opciones la cambien