Trabalhando com datas em TypeScript: visão geral das melhores bibliotecas
TypeScript, sendo uma extensão estritamente tipada sobre JavaScript, herda todos os problemas de trabalhar com datas inerentes ao Date nativo — API não intuitiva, mutabilidade, problemas com fusos horários e análise. Felizmente, o ecossistema TypeScript oferece várias bibliotecas poderosas que resolvem esses problemas. Neste artigo, veremos as três ferramentas mais populares: date-fns, Luxon e Day.js, compararemos seus recursos e forneceremos exemplos práticos de código.
1. date-fns — modular e funcional
date-fns é uma biblioteca construída com base nos princípios da programação funcional. Ela consiste em muitas funções independentes, permitindo importar apenas o necessário e não inflar o bundle. Funciona com objetos nativos Date, o que simplifica a integração.
Principais recursos:
- Funções puras: cada função retorna um novo objeto, sem modificar o original.
- Modularidade: importe apenas as funções necessárias (por exemplo,
import { format, addDays } from 'date-fns'). - Suporte a locales: suporte integrado para mais de 50 idiomas, incluindo português.
- TypeScript: excelente tipagem pronta para uso.
Exemplos de código com date-fns
Instalação:
npm install date-fnsFormatação de data:
import { format } from 'date-fns';import { ptBR } from 'date-fns/locale';
const date = new Date(2024, 11, 25); // 25 de dezembro de 2024const formatted = format(date, 'dd MMMM yyyy', { locale: ptBR });console.log(formatted); // "25 de dezembro de 2024"Manipulação de datas:
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(`Diferença: ${diff} dias`);Comparação de datas:
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 — poderoso e moderno
Luxon é uma biblioteca de um dos autores do Moment.js, criada para resolver suas deficiências. Luxon usa seus próprios objetos imutáveis (DateTime, Duration), em vez do Date nativo. Isso a torna especialmente conveniente para trabalhar com fusos horários e intervalos.
Principais recursos:
- Imutabilidade: todos os métodos retornam novas instâncias.
- Suporte integrado a fusos horários: sem plugins adicionais.
- Internacionalização: localização baseada na API Intl.
- Trabalho com intervalos e durações: métodos convenientes para calcular períodos de tempo.
Exemplos de código com Luxon
Instalação:
npm install luxonCriação e formatação de data:
import { DateTime } from 'luxon';
const dt = DateTime.fromISO('2024-12-25', { zone: 'Europe/Moscow' });console.log(dt.toFormat('dd.MM.yyyy HH:mm')); // "25.12.2024 00:00"
// Saída localizadaconsole.log(dt.setLocale('pt').toFormat('d MMMM yyyy')); // "25 de dezembro de 2024"Trabalhando com fusos horários:
const nyTime = DateTime.now().setZone('America/New_York');const moscowTime = nyTime.setZone('Europe/Moscow');console.log(`Em Nova York: ${nyTime.toFormat('HH:mm')}, em Moscou: ${moscowTime.toFormat('HH:mm')}`);Durações e intervalos:
import { Duration, Interval } from 'luxon';
const dur = Duration Também na biblioteca
Trabalhando com S3 e armazenamentos em nuvem em TypeScript: bibliotecas e exemplos
Rate Limiting em Node.js: Guia Completo para Proteção de API e Gerenciamento de Carga
Registro em Rust: visão geral das melhores bibliotecas e ferramentas
ring para Rust: guia completo com exemplos práticos