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

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 tiene funcionalidad limitada y una API incómoda. Afortunadamente, para Node.js existen muchas bibliotecas que simplifican el análisis, formateo, manipulación y comparación de fechas. En este artículo revisaremos las cuatro bibliotecas más populares: Moment.js, Day.js, date-fns y Luxon.



1. Moment.js (legendaria, pero obsoleta)



Moment.js fue durante mucho tiempo el estándar de facto para trabajar con fechas. Proporciona una API rica para análisis, validación, manipulación y formateo. Sin embargo, el proyecto está oficialmente considerado obsoleto (legacy) — los desarrolladores recomiendan usar alternativas modernas. Principales desventajas: gran tamaño (~300 KB), métodos mutantes (modifican el objeto original) y problemas con Tree Shaking.



// Instalación: npm install momentconst moment = require('moment');

// Análisis y formateoconst now = moment();console.log(now.format('YYYY-MM-DD HH:mm:ss')); // 2024-01-15 14:30:00

// Manipulacionesconst future = moment().add(7, 'days').startOf('week');console.log(future.format('dddd, MMMM Do YYYY')); // Monday, January 22nd 2024

// Diferencia entre fechasconst a = moment('2024-01-01');const b = moment('2024-01-10');console.log(b.diff(a, 'days')); // 9


2. Day.js (sucesor ligero)



Day.js es una biblioteca moderna con la misma API que Moment.js, pero con un tamaño de solo 2 KB. Es completamente inmutable (no modifica los objetos originales), admite plugins y funciona excelentemente con Tree Shaking. Es ideal para proyectos donde el tamaño del bundle es importante.



// Instalación: npm install dayjsconst dayjs = require('dayjs');const relativeTime = require('dayjs/plugin/relativeTime');dayjs.extend(relativeTime);

const now = dayjs();console.log(now.format('DD.MM.YYYY')); // 15.01.2024

// Trabajo con zonas horarias (requiere plugin utc)const utc = require('dayjs/plugin/utc');dayjs.extend(utc);const date = dayjs.utc('2024-01-15T12:00:00Z').local();console.log(date.format('HH:mm')); // 15:00 (depende de la zona horaria)

// Tiempo relativoconsole.log(dayjs('2023-12-25').fromNow()); // 3 weeks ago


3. date-fns (enfoque funcional)



date-fns es una biblioteca construida sobre principios de programación funcional. En lugar de un objeto único, proporciona muchas funciones puras. Cada función se importa por separado, lo que permite incluir solo el código necesario. Es la biblioteca más eficiente y modular de las mencionadas.



// Instalación: npm install date-fnsconst { format, addDays, differenceInDays, startOfWeek } = require('date-fns');const { ru } = require('date-fns/locale');

const now = new Date();

// Formateo con localizaciónconsole.log(format(now, 'PPPP', { locale: ru })); // понедельник, 15 января 2024 г.

// Manipulaciones (funciones puras)const nextWeek = addDays(now, 7);console.log(format(nextWeek, 'yyyy-MM-dd')); // 2024-01-22

// Diferenciaconst start = new Date(2024, 0, 1);console.log(differenceInDays(now, start)); // 14

// Inicio de semanaconst monday = startOfWeek(now, { weekStartsOn: 1 });console.log(format(monday, 'dd.MM.yyyy')); // 15.01.2024


4. Luxon (estándar moderno de los creadores de Moment.js)



Luxon es una biblioteca de los mismos desarrolladores que Moment.js, pero sin sus desventajas. Utiliza objetos nativos DateTime, Duration e Interval, es completamente inmutable, admite zonas horarias e internacionalización "de fábrica". Se recomienda para proyectos nuevos.



// Instalación: npm install luxonconst { DateTime, Duration, Inte                    

Recommendations