Trabajo con fechas en JavaScript (Node.js): bibliotecas populares

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

Trabajo con fechas en JavaScript (Node.js): resumen de bibliotecas populares



Trabajar con fechas y horas es una de las tareas más comunes en el desarrollo web. El objeto incorporado Date en JavaScript (Node.js) proporciona capacidades básicas, pero a menudo resulta incómodo y limitado: falta de formato conveniente, análisis, manipulaciones con zonas horarias y diferencia entre fechas. Afortunadamente, existen varias bibliotecas maduras que resuelven estos problemas. En este artículo, analizaremos las cuatro herramientas más populares para trabajar con fechas en Node.js.



1. Moment.js — un clásico (pero con reservas)

Moment.js fue durante mucho tiempo el estándar de facto para trabajar con fechas en JavaScript. Proporciona una API rica para análisis, validación, formato y manipulaciones de fechas.



Instalación:

npm install moment


Ejemplo de uso:

const moment = require('moment');

// Fecha y hora actualconst now = moment();console.log(now.format('YYYY-MM-DD HH:mm:ss')); // 2025-03-21 14:30:00

// Análisis de cadenaconst date = moment('2025-12-25', 'YYYY-MM-DD');console.log(date.format('dddd, MMMM Do YYYY')); // Thursday, December 25th 2025

// Manipulacionesconst future = moment().add(7, 'days').subtract(2, 'hours');console.log(future.fromNow()); // "in 6 days"

// Diferencia entre fechasconst a = moment('2025-01-01');const b = moment('2025-03-21');console.log(b.diff(a, 'days')); // 79


Ventajas: comunidad enorme, documentación detallada, múltiples complementos (trabajo con zonas horarias, localización).

Desventajas: la biblioteca está obsoleta (modo de soporte), tamaño grande (~230 KB), métodos mutantes (modifican el objeto original). Los desarrolladores recomiendan usar alternativas modernas.



2. date-fns — enfoque modular y funcional

date-fns es una biblioteca moderna construida sobre principios de programación funcional. Cada función es un módulo independiente, lo que permite conectar solo las partes necesarias y reducir el tamaño del bundle.



Instalación:

npm install date-fns


Ejemplo de uso:

const { format, addDays, subHours, differenceInDays, parseISO } = require('date-fns');

// Formatoconst now = new Date();console.log(format(now, 'yyyy-MM-dd HH:mm:ss')); // 2025-03-21 14:30:00

// Manipulaciones (inmutable — se crea un nuevo objeto)const future = addDays(now, 7);const adjusted = subHours(future, 2);console.log(format(adjusted, 'dd.MM.yyyy')); // 28.03.2025

// Diferenciaconst start = parseISO('2025-01-01');const end = new Date();console.log(differenceInDays(end, start)); // 79

// Localización (rusa)const { ru } = require('date-fns/locale');console.log(format(now, 'PPPP', { locale: ru })); // "пятница, 21 марта 2025 г."


Ventajas: modularidad, inmutabilidad (no modifica los objetos originales), soporte para TypeScript, excelente documentación.

Desventajas: requiere Node.js 14+, no tiene soporte incorporado para zonas horarias (requiere date-fns-tz).



3. Day.js — alternativa ligera y rápida a Moment.js

Day.js es una biblioteca minimalista (solo 2 KB) que tiene una API casi completamente compatible con Moment.js. Es ideal si necesitas reemplazar Moment.js sin reescribir código.



Instalación:

npm install dayjs


Ejemplo de uso:

const dayjs = require('dayjs');const utc = require('dayjs/plugin/utc');const relativeTime = require('dayjs/plugin/relativeTime');

dayjs.extend(utc);dayjs.extend(relativeTime);

// Uso básico (como en Moment)const now = dayjs();console.log(now

Recommendations