Trabalho 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

Trabalho com datas em JavaScript (Node.js): visão geral das bibliotecas populares



Trabalhar com datas e horas é uma das tarefas mais comuns no desenvolvimento web. O objeto nativo Date em JavaScript (Node.js) oferece funcionalidades básicas, mas muitas vezes se mostra inconveniente e limitado: falta de formatação conveniente, parsing, manipulação de fusos horários e cálculo de diferenças entre datas. Felizmente, existem várias bibliotecas maduras que resolvem esses problemas. Neste artigo, veremos quatro das ferramentas mais populares para trabalhar com datas em Node.js.



1. Moment.js — o clássico (mas com ressalvas)

Moment.js foi por muito tempo o padrão de facto para trabalhar com datas em JavaScript. Ela oferece uma API rica para parsing, validação, formatação e manipulação de datas.



Instalação:

npm install moment


Exemplo de uso:

const moment = require('moment');

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

// Parsing de stringconst date = moment('2025-12-25', 'YYYY-MM-DD');console.log(date.format('dddd, MMMM Do YYYY')); // Thursday, December 25th 2025

// Manipulaçõesconst future = moment().add(7, 'days').subtract(2, 'hours');console.log(future.fromNow()); // "in 6 days"

// Diferença entre datasconst a = moment('2025-01-01');const b = moment('2025-03-21');console.log(b.diff(a, 'days')); // 79


Prós: comunidade enorme, documentação detalhada, muitos plugins (trabalho com fusos horários, localização).

Contras: biblioteca desatualizada (modo de suporte), tamanho grande (~230 KB), métodos mutáveis (alteram o objeto original). Os desenvolvedores recomendam o uso de alternativas modernas.



2. date-fns — abordagem modular e funcional

date-fns é uma biblioteca moderna, construída com base nos princípios da programação funcional. Cada função é um módulo separado, permitindo importar apenas as partes necessárias e reduzir o tamanho do bundle.



Instalação:

npm install date-fns


Exemplo de uso:

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

// Formataçãoconst now = new Date();console.log(format(now, 'yyyy-MM-dd HH:mm:ss')); // 2025-03-21 14:30:00

// Manipulações (imutável — cria um novo objeto)const future = addDays(now, 7);const adjusted = subHours(future, 2);console.log(format(adjusted, 'dd.MM.yyyy')); // 28.03.2025

// Diferençaconst start = parseISO('2025-01-01');const end = new Date();console.log(differenceInDays(end, start)); // 79

// Localização (português)const { pt } = require('date-fns/locale');console.log(format(now, 'PPPP', { locale: pt })); // "sexta-feira, 21 de março de 2025"


Prós: modularidade, imutabilidade (não altera objetos originais), suporte a TypeScript, documentação excelente.

Contras: requer Node.js 14+, sem suporte nativo a fusos horários (requer date-fns-tz).



3. Day.js — alternativa leve e rápida ao Moment.js

Day.js é uma biblioteca minimalista (apenas 2 KB) que possui uma API quase totalmente compatível com o Moment.js. É ideal se você precisa substituir o Moment.js sem reescrever o código.



Instalação:

npm install dayjs


Exemplo de uso:

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

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

// Uso básico (como no Moment)const now = dayjs();console.log(now

Recommendations