Trabalhando com datas em JavaScript (Node.js): bibliotecas populares

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

Visão geral das bibliotecas para trabalhar com datas em JavaScript (Node.js)



Trabalhar com datas é uma das tarefas mais frequentes e, ao mesmo tempo, complexas no desenvolvimento web. Em JavaScript, o objeto nativo Date possui várias desvantagens: mutabilidade, capacidades limitadas de formatação e parsing, e problemas com fusos horários. Felizmente, o ecossistema Node.js oferece várias bibliotecas poderosas que simplificam significativamente a manipulação de datas. Neste artigo, vamos analisar as quatro mais populares: Moment.js, Day.js, date-fns e Luxon.



1. Moment.js — o clássico do gênero



Por muito tempo, o Moment.js foi o padrão de facto para trabalhar com datas. Ele fornece uma API rica para parsing, validação, manipulação e exibição de datas. No entanto, a biblioteca é considerada obsoleta (modo de manutenção) e não é recomendada para novos projetos devido ao seu grande tamanho (cerca de 300 KB) e problemas de desempenho.



Instalação:

npm install moment


Exemplos de uso:

const moment = require('moment');

// Data atualconst now = moment();console.log(now.format('YYYY-MM-DD HH:mm:ss')); // 2025-03-15 14:30:00

// Parsing de stringconst date = moment('2025-12-31', 'YYYY-MM-DD');console.log(date.add(1, 'day').format('DD.MM.YYYY')); // 01.01.2026

// Diferença entre datasconst start = moment('2025-01-01');const end = moment('2025-03-15');console.log('Dias passados:', end.diff(start, 'days')); // 73


2. Day.js — alternativa leve



Day.js é uma biblioteca minimalista (apenas 2 KB) que é totalmente compatível com a API do Moment.js. É ideal para projetos onde o tamanho do bundle é importante. O Day.js suporta plugins para expandir a funcionalidade (fusos horários, tempo relativo, etc.).



Instalação:

npm install dayjs


Exemplos de uso:

const dayjs = require('dayjs');const relativeTime = require('dayjs/plugin/relativeTime');const utc = require('dayjs/plugin/utc');

dayjs.extend(relativeTime);dayjs.extend(utc);

// Data atualconsole.log(dayjs().format('DD.MM.YYYY')); // 15.03.2025

// Tempo relativoconsole.log(dayjs('2025-03-10').fromNow()); // 5 dias atrás

// Trabalhando com UTCconsole.log(dayjs.utc().format()); // 2025-03-15T11:30:00Z


3. date-fns — abordagem funcional



date-fns é uma biblioteca moderna construída com base nos princípios da programação funcional. Ao contrário do Moment.js, ela não usa objetos mutáveis e suporta tree-shaking, permitindo importar apenas as funções necessárias e reduzir o tamanho do bundle.



Instalação:

npm install date-fns


Exemplos de uso:

const { format, addDays, differenceInDays, parseISO } = require('date-fns');const { ptBR } = require('date-fns/locale');

// Formatação com localidadeconsole.log(format(new Date(), 'd MMMM yyyy', { locale: ptBR })); // 15 março 2025

// Manipulaçõesconst future = addDays(new Date(), 10);console.log(format(future, 'yyyy-MM-dd')); // 2025-03-25

// Diferençaconst d1 = parseISO('2025-01-01');const d2 = new Date();console.log('Dias desde o Ano Novo:', differenceInDays(d2, d1)); // 73


4. Luxon — o padrão moderno



Luxon é uma biblioteca dos criadores do Moment.js, mas sem suas desvantagens. Ela usa os objetos nativos DateTime, Duration e Interval, suporta fusos horários e internacionalização "prontos para uso". Luxon é ideal para cenários complexos com zonas horárias.



Instalação:

npm install luxon                    

Recommendations