Trabalhando com datas em TypeScript: visão geral das bibliotecas date-fns, Luxon e Day.js

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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


Formataçã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)); // true


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


Criaçã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

Recommendations