Trabajo con fechas en TypeScript: revisión de las mejores bibliotecas
TypeScript, al ser una extensión fuertemente tipada sobre JavaScript, hereda todos los problemas de trabajo con fechas inherentes al Date nativo: API poco intuitiva, mutabilidad, problemas con zonas horarias y análisis sintáctico. Afortunadamente, el ecosistema de TypeScript ofrece varias bibliotecas potentes que resuelven estos problemas. En este artículo, revisaremos las tres herramientas más populares: date-fns, Luxon y Day.js, compararemos sus capacidades y proporcionaremos ejemplos prácticos de código.
1. date-fns — modular y funcional
date-fns es una biblioteca construida sobre los principios de la programación funcional. Consiste en muchas funciones independientes, lo que permite importar solo lo necesario y no inflar el bundle. Funciona con objetos Date nativos, lo que simplifica la integración.
Características clave:
- Funciones puras: cada función devuelve un nuevo objeto, sin modificar el original.
- Modularidad: importe solo las funciones necesarias (por ejemplo,
import { format, addDays } from 'date-fns'). - Soporte de locales: soporte integrado para más de 50 idiomas, incluido el español.
- TypeScript: excelente tipificación desde el primer momento.
Ejemplos de código con date-fns
Instalación:
npm install date-fnsFormateo de fecha:
import { format } from 'date-fns';import { es } from 'date-fns/locale';
const date = new Date(2024, 11, 25); // 25 de diciembre de 2024const formatted = format(date, 'dd MMMM yyyy', { locale: es });console.log(formatted); // "25 diciembre 2024"Manipulación de fechas:
import { addDays, subMonths, differenceInDays } from 'date-fns';
const today = new Date();const future = addDays(today, 10);const past = subMonths(today, 3);const diff = differenceInDays(future, past);console.log(`Diferencia: ${diff} días`);Comparación de fechas:
import { isBefore, isAfter, isEqual } from 'date-fns';
const date1 = new Date(2024, 0, 1);const date2 = new Date(2024, 6, 1);console.log(isBefore(date1, date2)); // true2. Luxon — potente y moderno
Luxon es una biblioteca de uno de los autores de Moment.js, creada para solucionar sus deficiencias. Luxon utiliza sus propios objetos inmutables (DateTime, Duration), en lugar del Date nativo. Esto la hace especialmente conveniente para trabajar con zonas horarias e intervalos.
Características clave:
- Inmutabilidad: todos los métodos devuelven nuevas instancias.
- Soporte integrado de zonas horarias: sin complementos adicionales.
- Internacionalización: localización basada en la API Intl.
- Trabajo con intervalos y duraciones: métodos convenientes para calcular períodos de tiempo.
Ejemplos de código con Luxon
Instalación:
npm install luxonCreación y formateo de fecha:
import { DateTime } from 'luxon';
const dt = DateTime.fromISO('2024-12-25', { zone: 'Europe/Madrid' });console.log(dt.toFormat('dd.MM.yyyy HH:mm')); // "25.12.2024 00:00"
// Salida localizadaconsole.log(dt.setLocale('es').toFormat('d MMMM yyyy')); // "25 diciembre 2024"Trabajo con zonas horarias:
const nyTime = DateTime.now().setZone('America/New_York');const madridTime = nyTime.setZone('Europe/Madrid');console.log(`En Nueva York: ${nyTime.toFormat('HH:mm')}, en Madrid: ${madridTime.toFormat('HH:mm')}`);Duraciones e intervalos:
import { Duration, Interval } from 'luxon';
const dur = Durati También en la biblioteca
Generador de códigos QR en JavaScript (Node.js) con qrcode y qr-image
Trabajo con imágenes en Kotlin: bibliotecas y herramientas
Envío de correo electrónico en Swift: bibliotecas y ejemplos para iOS/macOS
gRPC C++: Guía completa con ejemplos prácticos
Tokens JWT en Swift: Trabajo con JSON Web Token en iOS/macOS