Trabajo con fechas en TypeScript: revisión de las bibliotecas date-fns, Luxon y Day.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

Trabajo con fechas en TypeScript: revisión de bibliotecas populares



Trabajar con fechas y horas es una de las tareas más comunes y, al mismo tiempo, no triviales en el desarrollo web. El objeto nativo Date en JavaScript (y TypeScript) tiene una serie de deficiencias: mutabilidad, API poco intuitiva, problemas con las zonas horarias y falta de métodos convenientes de formato. Afortunadamente, el ecosistema de TypeScript ofrece varias bibliotecas potentes que resuelven estos problemas y brindan un excelente soporte de tipos.



En este artículo, analizaremos las tres bibliotecas más populares: date-fns, Luxon y Day.js. Conocerá sus características, ventajas, desventajas y verá ejemplos de uso con TypeScript.



1. date-fns — modular y funcional



date-fns es una biblioteca construida sobre los principios de la programación funcional. Cada función es un módulo separado, lo que permite importar solo lo necesario y reduce significativamente el tamaño del bundle. En TypeScript, la biblioteca tiene tipos integrados.



Instalación

npm install date-fns


Ejemplos de uso con TypeScript

import { format, addDays, differenceInDays, isAfter, parseISO } from 'date-fns';

// Formateo de fechaconst today = new Date();console.log(format(today, 'yyyy-MM-dd')); // '2025-03-20'

// Adición de díasconst nextWeek = addDays(today, 7);console.log(format(nextWeek, 'dd.MM.yyyy')); // '27.03.2025'

// Diferencia entre fechasconst startDate = parseISO('2025-01-01');const endDate = parseISO('2025-12-31');const daysBetween = differenceInDays(endDate, startDate);console.log(`Días en 2025: ${daysBetween}`); // 364

// Comparación de fechasconst isFuture = isAfter(parseISO('2025-06-01'), today);console.log(`¿El 1 de junio de 2025 está en el futuro? ${isFuture}`); // true


Ventajas

  • Tree-shaking — importa solo las funciones necesarias, lo que reduce el tamaño de la aplicación.
  • Inmutabilidad — las funciones no modifican los objetos originales, sino que devuelven otros nuevos.
  • Soporte de TypeScript — tipificación completa desde el primer momento.
  • Localización — soporte para múltiples idiomas, incluido el español.


Desventajas

  • Trabaja con el Date nativo, lo que puede ser incómodo para operaciones complejas con zonas horarias.
  • No tiene soporte integrado para objetos inmutables (como en Luxon).


2. Luxon — potente y moderno



Luxon es una biblioteca de uno de los autores de Moment.js, pero sin sus desventajas. Utiliza sus propios objetos inmutables DateTime, Duration e Interval, lo que hace que trabajar con fechas sea intuitivo y seguro. Luxon tiene un excelente soporte para zonas horarias y configuraciones regionales.



Instalación

npm install luxon

Para TypeScript, puede ser necesaria la instalación de tipos:

npm install --save-dev @types/luxon


Ejemplos de uso con TypeScript

import { DateTime, Duration } from 'luxon';

// Creación y formateoconst now = DateTime.now();console.log(now.toFormat('yyyy-MM-dd HH:mm:ss')); // '2025-03-20 14:30:00'

// Trabajo con zonas horariasconst moscowTime = DateTime.now().setZone('Europe/Moscow');console.log(`Hora de Moscú: ${moscowTime.toFormat('HH:mm')}`);

// Adición de intervaloconst nextMonth = now.plus({ months: 1 });console.log(`En un mes: ${nextMonth.toFormat('dd.MM.yyyy')}`);

// Diferencia entre fechasconst start = DateTime.fromISO('2025-01-01');const end = DateTime.fromISO('2025-12-31');const diff = end.diff(start, ['months', 'days']);console.log(`Diferencia: ${diff.months} meses y ${diff.days} días`);

// Trabajo con duracionesconst duration = Duration.from

Recommendations