`Date` Objeto
Este artículo explica el objeto Date.
Explicaremos el objeto Date paso a paso, desde los mecanismos básicos hasta las operaciones más comunes en el trabajo práctico, con ejemplos concretos.
YouTube Video
Date Objeto
¿Qué es el objeto Date?
El objeto Date de JavaScript es un objeto estándar para manejar fechas y horas. Internamente, gestiona la fecha y la hora basándose en el número de milisegundos transcurridos desde el 1 de enero de 1970, 00:00:00 UTC.
Primero, vamos a crear un objeto Date que represente la fecha y hora actuales, y revisemos su contenido.
1const now = new Date();
2console.log(now);- Este código crea un objeto
Dateque representa la fecha y hora actuales en el momento de la ejecución. El formato de visualización depende del entorno de ejecución, como el navegador o el sistema operativo.
Cómo crear un objeto Date
Los objetos Date se pueden crear de varias maneras, según tus necesidades. Un punto especialmente importante que es fácil confundir es que el argumento del constructor para el mes comienza en cero, lo que significa que los meses empiezan en 0.
1const d1 = new Date(); // Current date and time
2const d2 = new Date("2025-01-01"); // Create from an ISO date string
3const d3 = new Date(2025, 0, 1); // January 1, 2025 (month is zero-based)
4const d4 = new Date(2025, 0, 1, 10, 30); // January 1, 2025, 10:30
5
6console.log(d1, d2, d3, d4);- En
new Date(año, mes, día), elmessignifica que0es enero y11es diciembre. Si no entiendes esta especificación, puedes crear sin querer una fecha desfasada un mes, así que siempre ten cuidado.
Obteniendo cada elemento de la fecha y la hora
Puedes obtener individualmente el año, el mes, el día, la hora y el día de la semana de un objeto Date. Todos los métodos getters devuelven los valores como números.
1const date = new Date();
2
3console.log(date.getFullYear()); // Year
4console.log(date.getMonth()); // Month (0-based: 0 = January)
5console.log(date.getDate()); // Day of the month
6console.log(date.getHours()); // Hours
7console.log(date.getMinutes()); // Minutes
8console.log(date.getSeconds()); // Seconds
9console.log(date.getDay()); // Day of the week (0 = Sunday, 6 = Saturday)
- Al igual que con la creación, ten cuidado de que
getMonth()también empieza en cero. Al usarlo para mostrar, es común sumar 1 para ajustar el valor. getDay()devuelve el día de la semana como un número. 0 representa el domingo y 6 representa el sábado.
Modificando fechas y horas
Date es un objeto mutable, lo que significa que puedes cambiar sus valores después. Esta propiedad es útil, pero debes tener cuidado con los efectos secundarios no deseados.
Puedes usar los métodos set para cambiar los valores de un objeto Date existente.
1const date = new Date("2025-01-01");
2
3date.setFullYear(2026);
4date.setMonth(5); // June
5date.setDate(15);
6
7console.log(date);setMonth()también empieza en cero. El objeto original se modifica directamente.
Sumando y restando fechas
Es común realizar cálculos de fechas utilizando milisegundos o usando setDate(). Para cálculos basados en días, usar setDate() es especialmente intuitivo y seguro.
1const date = new Date("2025-01-01");
2
3date.setDate(date.getDate() + 7);
4console.log(date);- En este ejemplo, estamos calculando la fecha siete días después de la fecha especificada. Incluso si la suma cruza a un nuevo mes, se ajusta automáticamente.
Comparando objetos Date
Los objetos Date pueden compararse como números. Esto se debe a que se compara el valor interno en milisegundos.
1const a = new Date("2025-01-01");
2const b = new Date("2025-01-10");
3
4console.log(a < b); // true
5console.log(a > b); // false
- Si quieres determinar el orden de las fechas, no se necesita una conversión adicional. Puedes usar los operadores de comparación directamente.
Trabajando con marcas de tiempo (milisegundos)
Date puede convertirse a y desde números que representan milisegundos (marcas de tiempo). Este formato se utiliza frecuentemente en APIs o integraciones con bases de datos.
1const now = Date.now();
2console.log(now);
3
4const date = new Date(now);
5console.log(date);Date.now()devuelve la hora actual en milisegundos. Es muy útil cuando quieres guardar o comparar el valor como un número.
Formateando fechas como cadenas
Mostrar un Date tal cual, a menudo da como resultado un formato que podría no ajustarse a tus necesidades. Por lo tanto, debes formatearlo explícitamente según tus requerimientos.
1const date = new Date("2025-01-01");
2
3const formatted = `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`;
4console.log(formatted);- Formateándolo manualmente de esta manera, puedes controlar completamente el formato de visualización. En el trabajo práctico, a menudo se utilizan librerías para este propósito.
Diferencia entre UTC y la hora local
Date proporciona métodos para manejar tanto la hora local como la UTC. Es importante comprender correctamente esta diferencia para integraciones con servidores y compatibilidad internacional.
1const date = new Date();
2
3console.log(date.getHours()); // Local time (hours)
4console.log(date.getUTCHours()); // UTC time (hours)
- Los métodos
getUTC*siempre devuelven valores basados en UTC. Sé especialmente cuidadoso al procesar datos en diferentes zonas horarias.
Precauciones al usar objetos Date
Date es conveniente, pero también tiene algunos aspectos complicados. En particular, que el mes empieza en cero y su mutabilidad son causas comunes de errores.
Veamos ejemplos específicos a continuación para observar los efectos del hecho de que Date es mutable.
1const original = new Date("2025-01-01");
2const copy = new Date(original);
3
4copy.setDate(10);
5
6console.log(original);
7console.log(copy);- Si quieres conservar la fecha y la hora originales, siempre crea una copia. Solo ser consciente de este punto te ayudará a evitar errores inesperados.
Razones por las que Date es difícil de manejar y criterios para usar bibliotecas
El objeto Date ofrece funciones suficientes como función estándar, pero en la práctica hay situaciones en las que puede ser difícil de usar. Los problemas típicos incluyen que los meses y días de la semana comienzan desde cero, la tendencia a confundir la hora local con la UTC, y el hecho de que el objeto es mutable. Estos problemas pueden causar más errores a medida que aumenta el procesamiento de fechas.
Date es suficiente para la obtención y comparación sencilla de fechas, pero la legibilidad y el mantenimiento del código tienden a disminuir cuando hay más cálculos de fechas o formateo de la visualización.
Si tienes requisitos como los siguientes, puedes considerar el uso de bibliotecas ligeras de fechas como dayjs o date-fns.
- Necesitas manejar zonas horarias de forma explícita
- Con frecuencia necesitas realizar cálculos de fechas o intervalos
- Quieres cambiar el formato de visualización de forma flexible
- Quieres manejar fechas y horas de manera inmutable
Resumen
Los objetos Date son la herramienta más fundamental para manejar fechas y horas en JavaScript. Entendiendo sus particularidades y realizando correctamente la creación, obtención, cálculo y formateo, puedes usarlo de manera segura en el trabajo real.
Después de dominar lo básico, usar librerías de fechas según sea necesario es una elección práctica.
Puedes seguir el artículo anterior utilizando Visual Studio Code en nuestro canal de YouTube. Por favor, también revisa nuestro canal de YouTube.