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 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-fns


Formateo 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)); // true


2. 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 luxon


Creació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

Recommendations