Fechas
Cualquier aplicación real necesita trabajar con fechas: cuándo se creó un pedido, cuántos días de racha lleva un usuario (como la que ya usa esta misma academia), cuándo caduca algo. El objeto Date de JavaScript es la herramienta clásica para esto — con algunas peculiaridades que conviene conocer antes de que te sorprendan.
Crear una fecha
La fecha y hora actuales, exactas al momento de ejecutarse.
Una fecha concreta, a partir de un string en formato ISO (año-mes-dia).
Año, mes, día por separado — con una trampa: los meses empiezan en 0 (enero es 0, marzo es 2).
getMonth() devuelve 0 para enero y 11 para
diciembre. Es la fuente de bugs "off-by-one" más famosa de todo JavaScript
— si necesitas mostrar el mes al usuario, recuerda sumar 1.
El año con cuatro dígitos.
El mes, de 0 (enero) a 11 (diciembre).
El día del mes, de 1 a 31.
El día de la semana, de 0 (domingo) a 6 (sábado).
La hora y los minutos.
Formatear fechas para mostrarlas
Para mostrar una fecha legible sin construir el string a mano,
toLocaleDateString() usa el formato del idioma
que le indiques:
Comparar fechas y calcular diferencias
Internamente, una fecha en JavaScript es un número: los milisegundos
transcurridos desde el 1 de enero de 1970. getTime()
te da ese número, lo que permite restar fechas para saber cuánto tiempo ha
pasado entre una y otra:
La racha de días que ves en tu perfil de Gráffica Academy (arriba a la derecha) funciona con exactamente esta idea: cada visita se guarda como una fecha, y un pequeño cálculo de diferencias entre días consecutivos decide si la racha sigue viva o se ha roto.
Lo que viene: la propuesta Temporal
Date tiene años (nunca mejor dicho) y varios
defectos conocidos: es mutable, mezcla fecha con hora, y su manejo de zonas
horarias es confuso. Por eso existe Temporal, una propuesta
moderna para sustituirlo con una API mucho más clara — pero todavía está en
proceso de estandarización y no está disponible en todos los navegadores. Por
ahora, para cualquier proyecto real, Date sigue
siendo la herramienta que vas a usar.
Comprueba lo que has aprendido
1. Si fecha.getMonth() devuelve 0, ¿qué mes es?
2. ¿Qué representa internamente un objeto Date en JavaScript?
3. ¿Por qué existe la propuesta Temporal?