Trabajo con fechas y horas en JavaScript: de la A a la Z para Node.js

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: Por qué trabajar con fechas en JavaScript es un desafío para el desarrollador

Trabajar con fechas y horas es una de las tareas más comunes y, al mismo tiempo, más engañosas en el desarrollo web. Parece que podría ser más sencillo que obtener la fecha actual o calcular la diferencia entre dos eventos. Sin embargo, en la práctica, los desarrolladores de JavaScript (Node.js) se enfrentan a múltiples trampas: zonas horarias, formato ISO, el comportamiento poco intuitivo del método getMonth() y librerías obsoletas. En este artículo, analizaremos el trabajo con fechas desde los principios básicos hasta técnicas avanzadas, utilizando solo el objeto estándar Date y la librería moderna date-fns.



1. Fundamentos del objeto Date en Node.js

El objeto incorporado Date es la base para trabajar con el tiempo. Almacena la cantidad de milisegundos transcurridos desde el 1 de enero de 1970 (época Unix). Veamos las operaciones principales.



Creación y obtención de la hora actual

La forma más sencilla de crear un objeto de fecha es llamar a new Date() sin argumentos. Esto devuelve la fecha y hora actuales en el servidor.

// Fecha y hora actuales (en la zona horaria del servidor)const now = new Date();console.log(now); // Ejemplo: 2024-05-20T14:30:00.000Z

// Creación a partir de una cadena ISOconst specificDate = new Date('2024-12-25T10:00:00');console.log(specificDate); // 2024-12-25T10:00:00.000Z

// Creación a partir de componentes (año, mes, día, horas, minutos, segundos)const birthday = new Date(1990, 5, 15); // Atención: ¡mes 5 = Junio!console.log(birthday); // 1990-06-15T00:00:00.000Z

Nota importante: Los meses en JavaScript se numeran desde 0 (Enero — 0, Diciembre — 11). Esta es una causa frecuente de errores.



Métodos para obtener componentes de la fecha

Para extraer partes individuales de la fecha se utilizan los getters. Recuerde que devuelven valores en la zona horaria local del servidor.

const date = new Date('2024-03-15T12:30:45');

console.log(date.getFullYear()); // 2024console.log(date.getMonth()); // 2 (Marzo, ya que el conteo comienza en 0)console.log(date.getDate()); // 15console.log(date.getDay()); // 5 (Viernes, 0 - Domingo)console.log(date.getHours()); // 12console.log(date.getMinutes()); // 30console.log(date.getSeconds()); // 45

Para trabajar en UTC (Tiempo Universal Coordinado), use los métodos con el prefijo getUTC..., por ejemplo getUTCHours().



2. Formato y salida de fechas

En Node.js no hay un formato de fecha conveniente incorporado para convertir a un formato de cadena arbitrario (por ejemplo, "15 de marzo de 2024"). Para ello, hay dos caminos: la construcción manual de la cadena o el uso de librerías.



Formato manual (sin librerías externas)

Si necesita mostrar una fecha en un formato simple, puede escribir una pequeña función.

function formatDate(date) {  const day = String(date.getDate()).padStart(2, '0');  const month = String(date.getMonth() + 1).padStart(2, '0');  const year = date.getFullYear();  return `${day}.${month}.${year}`;}

const today = new Date();console.log(formatDate(today)); // Ejemplo: "20.05.2024"


Solución moderna: la librería date-fns

La librería date-fns es una alternativa moderna, modular y ligera al obsoleto moment.js. Es ideal para Node.js.

// Instalación: npm install date-fns

const { format, addDays, differenceInDays } = require('date-fns');const { es } = require('date-fns/locale'); // Localización

const date = new Date();

// Formato con localizaciónconsole.log(format(date, "dd 'de' MMMM 'de' yyyy", { locale: es }));// Ejemplo: "20 de mayo de 2024"

// Adición de díasconst nextWeek = addDays(date, 7);console.log(format(nextWeek, 'yyyy-MM-dd')); // "2024-05-27"

// Diferencia en díasconst start = new Date(2024, 0, 1);const end = new Date(2024, 11, 31);co

Blogs

Book Recommendations