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 momentExemplo 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')); // 79Pró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-fnsExemplo 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 dayjsExemplo 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 Também na biblioteca
Trabalhando com CSV em Swift (iOS/macOS): bibliotecas e exemplos
Registro em Kotlin: visão geral das melhores bibliotecas e soluções
Geolocalização e Mapas em Kotlin: Guia Completo de Integração
multierr para Go: guia completo com exemplos práticos