Trabajo con fechas en TypeScript: reseña de bibliotecas
Trabajar con fechas es una de las tareas más comunes en el desarrollo web. En TypeScript (y JavaScript), el objeto nativo Date tiene capacidades limitadas y una API incómoda. Afortunadamente, existen muchas bibliotecas que simplifican el formato, análisis, comparación y manipulación de fechas. En este artículo, revisaremos cuatro bibliotecas populares: date-fns, Day.js, Luxon y Moment.js, y mostraremos ejemplos de su uso en TypeScript.
1. date-fns — modular y ligera
date-fns es una biblioteca moderna construida sobre el principio de modularidad. Importas solo las funciones que necesitas, lo que mantiene el tamaño del bundle al mínimo. date-fns tiene un excelente soporte para TypeScript desde el primer momento.
Instalación:
npm install date-fns# oyarn add date-fnsEjemplos de uso:
import { format, addDays, differenceInDays, parseISO } from 'date-fns';
// Formatoconst today = new Date();console.log(format(today, 'yyyy-MM-dd')); // 2025-03-15
// Agregar díasconst future = addDays(today, 10);console.log(format(future, 'dd.MM.yyyy')); // 25.03.2025
// Diferencia entre fechasconst start = parseISO('2025-01-01');const end = parseISO('2025-03-15');console.log(differenceInDays(end, start)); // 73
// Verificar si es fin de semanaimport { isWeekend } from 'date-fns';console.log(isWeekend(new Date(2025, 2, 15))); // true (sábado)2. Day.js — alternativa ligera a Moment.js
Day.js es una biblioteca minimalista (solo 2 kB) con una API muy similar a Moment.js. Es ideal si deseas migrar desde Moment pero reducir el tamaño del bundle. Day.js soporta TypeScript a través de tipos.
Instalación:
npm install dayjs# oyarn add dayjsEjemplos de uso:
import dayjs from 'dayjs';import relativeTime from 'dayjs/plugin/relativeTime';import utc from 'dayjs/plugin/utc';
dayjs.extend(relativeTime);dayjs.extend(utc);
// Creación y formatoconst now = dayjs();console.log(now.format('DD/MM/YYYY HH:mm')); // 15/03/2025 14:30
// Tiempo relativoconsole.log(dayjs('2025-03-10').fromNow()); // 5 days ago
// Trabajo con UTCconst utcDate = dayjs.utc('2025-03-15T12:00:00Z');console.log(utcDate.local().format('HH:mm')); // hora local
// Manipulacionesconst nextMonth = dayjs().add(1, 'month');console.log(nextMonth.format('MMMM YYYY')); // April 20253. Luxon — potente y moderno
Luxon es el sucesor de Moment.js, desarrollado por el mismo equipo. Utiliza el objeto nativo DateTime, soporta zonas horarias, intervalos y duraciones. Luxon está escrito en TypeScript y tiene una excelente tipificación.
Instalación:
npm install luxon# oyarn add luxonEjemplos de uso:
import { DateTime, Interval, Duration } from 'luxon';
// Creación y formatoconst dt = DateTime.now();console.log(dt.toFormat('yyyy LLL dd')); // 2025 Mar 15
// Zonas horariasconst ny = DateTime.now().setZone('America/New_York');console.log(ny.toLocaleString(DateTime.DATETIME_FULL)); // March 15, 2025 at 9:30 AM EDT
// Intervalosconst start = DateTime.fromISO('2025-01-01');const end = DateTime.fromISO('2025-03-15');const interval = Interval.fromDateTimes(start, end);console.log(interval.length('days')); // 73
// Duracionesconst dur = Duration.fromObject({ hours: 5, minutes: 30 });console.log(dur.toHuman()); // 5 hours, 30 minutes
// Análisis