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')); // 92. 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 ago3. 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.20244. 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 También en la biblioteca
Validator para Go: guía completa con ejemplos prácticos
Envío de Email en C# (.NET): biblioteca System.Net.Mail
Configuración de aplicaciones Go (Golang): bibliotecas y herramientas
Guía completa de Conan para C++ con ejemplos prácticos
Trabajo con XML en Go (Golang): biblioteca estándar encoding/xml