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 bibliotecas populares



Trabalhar com datas e horas é uma das tarefas mais comuns e, ao mesmo tempo, não triviais no desenvolvimento web. O objeto nativo Date em JavaScript (e TypeScript) tem várias desvantagens: mutabilidade, API não intuitiva, problemas com fusos horários e falta de métodos convenientes de formatação. Felizmente, o ecossistema TypeScript oferece várias bibliotecas poderosas que resolvem esses problemas e fornecem excelente suporte a tipos.



Neste artigo, veremos três das bibliotecas mais populares: date-fns, Luxon e Day.js. Você aprenderá sobre suas características, vantagens, desvantagens e verá exemplos de uso com TypeScript.



1. date-fns — modular e funcional



date-fns é uma biblioteca construída com base nos princípios da programação funcional. Cada função é um módulo separado, o que permite importar apenas o necessário e reduz significativamente o tamanho do bundle. No TypeScript, a biblioteca possui tipos integrados.



Instalação

npm install date-fns


Exemplos de uso com TypeScript

import { format, addDays, differenceInDays, isAfter, parseISO } from 'date-fns';

// Formatação de dataconst today = new Date();console.log(format(today, 'yyyy-MM-dd')); // '2025-03-20'

// Adicionando diasconst nextWeek = addDays(today, 7);console.log(format(nextWeek, 'dd.MM.yyyy')); // '27.03.2025'

// Diferença entre datasconst startDate = parseISO('2025-01-01');const endDate = parseISO('2025-12-31');const daysBetween = differenceInDays(endDate, startDate);console.log(`Dias em 2025: ${daysBetween}`); // 364

// Comparação de datasconst isFuture = isAfter(parseISO('2025-06-01'), today);console.log(`1 de junho de 2025 está no futuro? ${isFuture}`); // true


Vantagens

  • Tree-shaking — você importa apenas as funções necessárias, o que reduz o tamanho da aplicação.
  • Imutabilidade — as funções não modificam os objetos originais, mas retornam novos.
  • Suporte a TypeScript — tipagem completa pronta para uso.
  • Localização — suporte a vários idiomas, incluindo português.


Desvantagens

  • Trabalha com o Date nativo, o que pode ser inconveniente para operações complexas com fusos horários.
  • Não possui suporte interno para objetos imutáveis (como no Luxon).


2. Luxon — poderoso e moderno



Luxon é uma biblioteca de um dos autores do Moment.js, mas sem suas desvantagens. Ela usa seus próprios objetos imutáveis DateTime, Duration e Interval, o que torna o trabalho com datas intuitivo e seguro. O Luxon tem excelente suporte para fusos horários e localidades.



Instalação

npm install luxon

Para TypeScript, pode ser necessário instalar os tipos:

npm install --save-dev @types/luxon


Exemplos de uso com TypeScript

import { DateTime, Duration } from 'luxon';

// Criação e formataçãoconst now = DateTime.now();console.log(now.toFormat('yyyy-MM-dd HH:mm:ss')); // '2025-03-20 14:30:00'

// Trabalhando com fusos horáriosconst moscowTime = DateTime.now().setZone('Europe/Moscow');console.log(`Horário de Moscou: ${moscowTime.toFormat('HH:mm')}`);

// Adicionando intervaloconst nextMonth = now.plus({ months: 1 });console.log(`Daqui a um mês: ${nextMonth.toFormat('dd.MM.yyyy')}`);

// Diferença entre datasconst start = DateTime.fromISO('2025-01-01');const end = DateTime.fromISO('2025-12-31');const diff = end.diff(start, ['months', 'days']);console.log(`Diferença: ${diff.months} meses e ${diff.days} dias`);

// Trabalhando com duraçõesconst duration = Duration.from

Recommendations