Trabalhando com datas em TypeScript: visão geral das bibliotecas
Trabalhar com datas é uma das tarefas mais comuns no desenvolvimento web. Em TypeScript (e JavaScript), o objeto nativo Date tem capacidades limitadas e uma API inconveniente. Felizmente, existem muitas bibliotecas que simplificam a formatação, parsing, comparação e manipulação de datas. Neste artigo, veremos quatro bibliotecas populares: date-fns, Day.js, Luxon e Moment.js, e mostraremos exemplos de seu uso em TypeScript.
1. date-fns — modular e leve
date-fns é uma biblioteca moderna, construída com base no princípio da modularidade. Você importa apenas as funções necessárias, o que mantém o tamanho do bundle mínimo. date-fns tem excelente suporte a TypeScript nativamente.
Instalação:
npm install date-fns# ouyarn add date-fnsExemplos de uso:
import { format, addDays, differenceInDays, parseISO } from 'date-fns';
// Formataçãoconst today = new Date();console.log(format(today, 'yyyy-MM-dd')); // 2025-03-15
// Adicionar diasconst future = addDays(today, 10);console.log(format(future, 'dd.MM.yyyy')); // 25.03.2025
// Diferença entre datasconst start = parseISO('2025-01-01');const end = parseISO('2025-03-15');console.log(differenceInDays(end, start)); // 73
// Verificar se é fim de semanaimport { isWeekend } from 'date-fns';console.log(isWeekend(new Date(2025, 2, 15))); // true (sábado)2. Day.js — alternativa leve ao Moment.js
Day.js é uma biblioteca minimalista (apenas 2 kB) com uma API muito semelhante à do Moment.js. É ideal se você deseja migrar do Moment, mas reduzir o tamanho do bundle. Day.js suporta TypeScript através de tipos.
Instalação:
npm install dayjs# ouyarn add dayjsExemplos de uso:
import dayjs from 'dayjs';import relativeTime from 'dayjs/plugin/relativeTime';import utc from 'dayjs/plugin/utc';
dayjs.extend(relativeTime);dayjs.extend(utc);
// Criação e formataçãoconst now = dayjs();console.log(now.format('DD/MM/YYYY HH:mm')); // 15/03/2025 14:30
// Tempo relativoconsole.log(dayjs('2025-03-10').fromNow()); // 5 days ago
// Trabalhando com UTCconst utcDate = dayjs.utc('2025-03-15T12:00:00Z');console.log(utcDate.local().format('HH:mm')); // hora local
// Manipulaçõesconst nextMonth = dayjs().add(1, 'month');console.log(nextMonth.format('MMMM YYYY')); // April 20253. Luxon — poderoso e moderno
Luxon é o sucessor do Moment.js, desenvolvido pela mesma equipe. Ele usa o objeto nativo DateTime, suporta fusos horários, intervalos e durações. Luxon é escrito em TypeScript e possui uma excelente tipagem.
Instalação:
npm install luxon# ouyarn add luxonExemplos de uso:
import { DateTime, Interval, Duration } from 'luxon';
// Criação e formataçãoconst dt = DateTime.now();console.log(dt.toFormat('yyyy LLL dd')); // 2025 Mar 15
// Fusos horáriosconst 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
// Duraçõesconst dur = Duration.fromObject({ hours: 5, minutes: 30 });console.log(dur.toHuman()); // 5 hours, 30 minutes
// Parsing