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

Reseña de bibliotecas para trabajar con fechas en JavaScript (Node.js)



Trabajar con fechas es una de las tareas más comunes y, al mismo tiempo, complejas en el desarrollo web. En JavaScript, el objeto nativo Date tiene varias desventajas: mutabilidad, capacidades limitadas de formato y análisis, y problemas con las zonas horarias. Afortunadamente, el ecosistema de Node.js ofrece varias bibliotecas potentes que simplifican enormemente la manipulación de fechas. En este artículo, analizaremos las cuatro más populares: Moment.js, Day.js, date-fns y Luxon.



1. Moment.js — el clásico del género



Durante mucho tiempo, Moment.js fue el estándar de facto para trabajar con fechas. Proporciona una API rica para análisis, validación, manipulación y visualización de fechas. Sin embargo, la biblioteca se considera obsoleta (modo de mantenimiento) y no se recomienda para nuevos proyectos debido a su gran tamaño (alrededor de 300 KB) y problemas de rendimiento.



Instalación:

npm install moment


Ejemplos de uso:

const moment = require('moment');

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

// Análisis de cadenaconst date = moment('2025-12-31', 'YYYY-MM-DD');console.log(date.add(1, 'day').format('DD.MM.YYYY')); // 01.01.2026

// Diferencia entre fechasconst start = moment('2025-01-01');const end = moment('2025-03-15');console.log('Días transcurridos:', end.diff(start, 'days')); // 73


2. Day.js — alternativa ligera



Day.js es una biblioteca minimalista (solo 2 KB) que es completamente compatible con la API de Moment.js. Es ideal para proyectos donde el tamaño del paquete es importante. Day.js admite complementos para ampliar la funcionalidad (zonas horarias, tiempo relativo, etc.).



Instalación:

npm install dayjs


Ejemplos de uso:

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

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

// Fecha actualconsole.log(dayjs().format('DD.MM.YYYY')); // 15.03.2025

// Tiempo relativoconsole.log(dayjs('2025-03-10').fromNow()); // hace 5 días

// Trabajo con UTCconsole.log(dayjs.utc().format()); // 2025-03-15T11:30:00Z


3. date-fns — enfoque funcional



date-fns es una biblioteca moderna construida sobre principios de programación funcional. A diferencia de Moment.js, no utiliza objetos mutables y admite tree-shaking, lo que permite importar solo las funciones necesarias y reducir el tamaño del paquete.



Instalación:

npm install date-fns


Ejemplos de uso:

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

// Formato con localeconsole.log(format(new Date(), "d 'de' MMMM 'de' yyyy", { locale: es })); // 15 de marzo de 2025

// Manipulaciónconst future = addDays(new Date(), 10);console.log(format(future, 'yyyy-MM-dd')); // 2025-03-25

// Diferenciaconst d1 = parseISO('2025-01-01');const d2 = new Date();console.log('Días desde Año Nuevo:', differenceInDays(d2, d1)); // 73


4. Luxon — estándar moderno



Luxon es una biblioteca de los creadores de Moment.js, pero sin sus desventajas. Utiliza objetos nativos DateTime, Duration e Interval, y admite zonas horarias e internacionalización de forma nativa. Luxon es ideal para escenarios complejos con zonas horarias.



Instalación:

npm install luxon                    

Recommendations