Trabalho com datas em JavaScript (Node.js): melhores bibliotecas

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 JavaScript (Node.js): visão geral das bibliotecas populares



Trabalhar com datas e horas é uma das tarefas comuns no desenvolvimento web. O objeto nativo Date em JavaScript possui funcionalidade limitada e uma API inconveniente. Felizmente, para Node.js existem muitas bibliotecas que simplificam o parsing, formatação, manipulação e comparação de datas. Neste artigo, veremos quatro das bibliotecas mais populares: Moment.js, Day.js, date-fns e Luxon.



1. Moment.js (lendária, mas obsoleta)



Moment.js foi por muito tempo o padrão de facto para trabalhar com datas. Ela fornece uma API rica para parsing, validação, manipulação e formatação. No entanto, o projeto é oficialmente considerado obsoleto (legacy) — os desenvolvedores recomendam o uso de alternativas modernas. Principais desvantagens: tamanho grande (~300 KB), métodos mutáveis (alteram o objeto original) e problemas com Tree Shaking.



// Instalação: npm install momentconst moment = require('moment');

// Parsing e formataçãoconst now = moment();console.log(now.format('YYYY-MM-DD HH:mm:ss')); // 2024-01-15 14:30:00

// Manipulaçõesconst future = moment().add(7, 'days').startOf('week');console.log(future.format('dddd, MMMM Do YYYY')); // Monday, January 22nd 2024

// Diferença entre datasconst a = moment('2024-01-01');const b = moment('2024-01-10');console.log(b.diff(a, 'days')); // 9


2. Day.js (sucessor leve)



Day.js é uma biblioteca moderna com a mesma API do Moment.js, mas com apenas 2 KB de tamanho. Ela é completamente imutável (não altera objetos originais), suporta plugins e funciona perfeitamente com Tree Shaking. Ideal para projetos onde o tamanho do bundle é importante.



// Instalação: npm install dayjsconst dayjs = require('dayjs');const relativeTime = require('dayjs/plugin/relativeTime');dayjs.extend(relativeTime);

const now = dayjs();console.log(now.format('DD.MM.YYYY')); // 15.01.2024

// Trabalhando com fusos horários (requer plugin utc)const utc = require('dayjs/plugin/utc');dayjs.extend(utc);const date = dayjs.utc('2024-01-15T12:00:00Z').local();console.log(date.format('HH:mm')); // 15:00 (depende do fuso horário)

// Tempo relativoconsole.log(dayjs('2023-12-25').fromNow()); // 3 weeks ago


3. date-fns (abordagem funcional)



date-fns é uma biblioteca construída com princípios de programação funcional. Em vez de um único objeto, ela fornece muitas funções puras. Cada função é importada separadamente, permitindo incluir apenas o código necessário. É a biblioteca mais performática e modular entre as listadas.



// Instalação: npm install date-fnsconst { format, addDays, differenceInDays, startOfWeek } = require('date-fns');const { ptBR } = require('date-fns/locale');

const now = new Date();

// Formatação com localizaçãoconsole.log(format(now, 'PPPP', { locale: ptBR })); // segunda-feira, 15 de janeiro de 2024

// Manipulações (funções puras)const nextWeek = addDays(now, 7);console.log(format(nextWeek, 'yyyy-MM-dd')); // 2024-01-22

// Diferençaconst start = new Date(2024, 0, 1);console.log(differenceInDays(now, start)); // 14

// Início da semanaconst monday = startOfWeek(now, { weekStartsOn: 1 });console.log(format(monday, 'dd.MM.yyyy')); // 15.01.2024


4. Luxon (padrão moderno dos criadores do Moment.js)



Luxon é uma biblioteca dos mesmos desenvolvedores do Moment.js, mas sem suas desvantagens. Ela usa objetos nativos DateTime, Duration e Interval, é completamente imutável, suporta fusos horários e internacionalização "prontos para uso". Recomendada para novos projetos.



// Instalação: npm install luxonconst { DateTime, Duration, Inte                    

Recommendations