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 momentExemplos 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')); // 732. 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 dayjsExemplos 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:00Z3. 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-fnsExemplos 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)); // 734. 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 Também na biblioteca
Cliente Redis para Java: Jedis, Lettuce e Redisson — visão geral e exemplos
Validação de dados em Rust: bibliotecas e abordagens para código confiável
Biblioteca WebSocket Gorilla para Go (Golang) — guia completo