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-fnsEjemplos 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}`); // trueVentajas
- 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
Datenativo, 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 luxonPara TypeScript, puede ser necesaria la instalación de tipos:
npm install --save-dev @types/luxonEjemplos 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 También en la biblioteca
TypeStack/routing-controllers para TypeScript: guía completa con ejemplos
Trabajo con Excel en PHP: bibliotecas PhpSpreadsheet y OpenSpout
Internacionalización (i18n) en Rust: bibliotecas gettext-rs y fluent-rs
Envío de SMS en Swift (iOS/macOS): API MessageUI y servicios de terceros
Generador de códigos QR en Rust: biblioteca qr_code