Como pegar a diferença de dois datetimes com JavaScript
Neste artigo você vai aprender a como obter a diferença de dois datetimes com JavaScript, vem conferir o artigo!

Fala programador(a), beleza? Bora aprender mais sobre JavaScript!
Quando se trabalha com datas e horários em JavaScript, é comum precisar calcular a diferença entre dois datetimes.
Isso pode ser necessário em muitas situações, como calcular a idade de uma pessoa, a duração de um evento ou a diferença entre duas datas de vencimento.
Neste artigo, discutiremos as várias maneiras de calcular a diferença entre dois datetimes com JavaScript.
Usando a classe Date
Uma maneira simples de calcular a diferença entre dois datetimes é usar a classe Date.
A classe Date em JavaScript representa uma data e hora, e oferece muitos métodos para manipular e formatar datas e horários.
Aqui está um exemplo de como usar a classe Date para calcular a diferença entre dois datetimes:
const datetime1 = new Date("2022-02-18T10:00:00");
const datetime2 = new Date("2022-02-19T12:30:00");
const diferencaEmMilissegundos = datetime2.getTime() - datetime1.getTime();
const diferencaEmMinutos = diferencaEmMilissegundos / (1000 * 60);
console.log(`A diferença entre ${datetime1} e ${datetime2} é de ${diferencaEmMinutos} minutos.`);
Nesse exemplo, criamos duas instâncias da classe Date, representando dois datetimes.
Em seguida, usamos o método getTime() para obter a representação em milissegundos de cada datetime e calculamos a diferença entre eles.
Finalmente, dividimos a diferença em milissegundos pelo número de milissegundos em um minuto para obter a diferença em minutos.
Formação Vibe Coding
Do Prompt ao Produto: Crie Software Real com IA
- 474 aulas
- 20 projetos
- 39h 27min
Usando a biblioteca Moment.js
Outra maneira popular de trabalhar com datas e horários em JavaScript é usando a biblioteca Moment.js.
A biblioteca Moment.js oferece muitos recursos para manipular e formatar datas e horários, incluindo o cálculo da diferença entre dois datetimes.
Aqui está um exemplo de como usar a biblioteca Moment.js para calcular a diferença entre dois datetimes:
const datetime1 = moment("2022-02-18T10:00:00");
const datetime2 = moment("2022-02-19T12:30:00");
const diferencaEmMinutos = datetime2.diff(datetime1, "minutes");
console.log(`A diferença entre ${datetime1} e ${datetime2} é de ${diferencaEmMinutos} minutos.`);
Nesse exemplo, usamos a função moment() da biblioteca Moment.js para criar duas instâncias do objeto moment, representando dois datetimes.
Em seguida, usamos o método diff() para calcular a diferença entre os datetimes, especificando a unidade de medida desejada como “minutes”.
A biblioteca Moment.js, mencionada nesta abordagem, foi uma das bibliotecas JavaScript mais populares para trabalhar com datas e horários.
No entanto, ela foi oficialmente descontinuada em 2020.
Uma das principais razões para a descontinuação da biblioteca Moment.js foi o fato de que as APIs nativas do JavaScript para datas e horários foram aprimoradas ao longo dos anos, tornando-as mais completas e fáceis de usar.
Além disso, outras bibliotecas surgiram no mercado, como a biblioteca Luxon, que oferecem recursos avançados para trabalhar com datas e horários.
Usando a biblioteca Luxon
Outra biblioteca popular para trabalhar com datas e horários em JavaScript é a biblioteca Luxon.
A biblioteca Luxon oferece muitos recursos para manipular e formatar datas e horários, incluindo o cálculo da diferença entre dois datetimes.
Aqui está um exemplo de como usar a biblioteca Luxon para calcular a diferença entre dois datetimes:
const datetime1 = luxon.DateTime.fromISO("2022-02-18T10:00:00");
const datetime2 = luxon.DateTime.fromISO("2022-02-19T12:30:00");
const diferencaEmMinutos = datetime2.diff(datetime1, "minutes");
console.log(A diferença entre ${datetime1} e ${datetime2} é de ${diferencaEmMinutos} minutos.);
Nesse exemplo, usamos o método fromISO() da biblioteca Luxon para criar duas instâncias do objeto DateTime, representando dois datetimes.
Em seguida, usamos o método diff() para calcular a diferença entre os datetimes, especificando a unidade de medida desejada como “minutes”.
Quer aprender mais sobre React? Confira o vídeo abaixo:
Conclusão
Em resumo, calcular a diferença entre dois datetimes é uma tarefa comum em desenvolvimento web e é essencial para muitas funcionalidades, como o cálculo de idade, duração de eventos, entre outros.
Neste artigo, apresentamos diversas maneiras de calcular a diferença entre dois datetimes com JavaScript, incluindo o uso da classe Date, da biblioteca Moment.js e da biblioteca Luxon.
Cada método tem suas próprias vantagens e desvantagens, e o desenvolvedor deve escolher a solução mais adequada para cada caso.
É importante lembrar que as técnicas discutidas neste artigo podem tornar seu código mais eficiente e preciso, mas é necessário sempre considerar as implicações de desempenho do código.
Com essas informações, você poderá implementar as melhores práticas em seus projetos web e garantir a melhor experiência possível para seus usuários.
Está buscando a sua primeira vaga como Programador? Confira o nosso treinamento completo clicando aqui.
Nosso principal objetivo é tornar você um dev no menor tempo possível, através de uma metodologia planejada nos mínimos detalhes, após formar muitos outros desenvolvedores.
Uma plataforma de cursos com projetos completos, comunidade de alunos e muito mais!
Como converter a diferença em dias, horas e minutos:
O cálculo com getTime() sempre devolve milissegundos, então o segredo é só dividir pelo tamanho da unidade que tu quer
E pra não ficar chutando conta no meio do código, vale deixar as constantes prontas
const MS_POR_SEGUNDO = 1000
const MS_POR_MINUTO = MS_POR_SEGUNDO * 60
const MS_POR_HORA = MS_POR_MINUTO * 60
const MS_POR_DIA = MS_POR_HORA * 24
function diferenca(inicio, fim) {
const ms = Math.abs(fim.getTime() - inicio.getTime())
return {
dias: Math.floor(ms / MS_POR_DIA),
horas: Math.floor((ms % MS_POR_DIA) / MS_POR_HORA),
minutos: Math.floor((ms % MS_POR_HORA) / MS_POR_MINUTO),
segundos: Math.floor((ms % MS_POR_MINUTO) / MS_POR_SEGUNDO)
}
}
console.log(diferenca(new Date("2022-02-18T10:00:00"), new Date("2022-02-19T12:30:00")))
E o que esse % está fazendo aí?
Ele é o resto da divisão: depois de tirar os dias inteiros, o resto é o que sobrou pra virar hora, e assim por diante
Sem isso tu ia contar a mesma hora duas vezes, uma dentro do dia e outra solta
Repara também no Math.abs()
Se o usuário inverter a ordem das datas, a subtração vira negativa e o resultado sai esquisito
Com o abs tu garante a diferença sempre positiva, que é o que quase todo formulário espera 🙂
Cuidado com fuso horário e horário de verão:
Aqui mora a pegadinha que derruba muito código em produção
Uma string de data sem informação de fuso pode ser entendida de um jeito na tua máquina e de outro no servidor
Aí a diferença muda sozinha, e tu passa a tarde caçando bug que não está no cálculo, está na leitura da data
Regra prática pra dormir tranquilo:
grave e transporte suas datas com o fuso explícito (ou em UTC), e deixe a conversão pro fuso do usuário só na hora de EXIBIR
Tome cuidado também com a diferença em dias
No dia em que muda o horário de verão, aquele dia não tem a mesma quantidade de horas dos outros
Dividir milissegundos por um dia inteiro funciona pra duração, mas pode te dar um número quebrado quando o que tu quer é "quantos dias de calendário passaram"
Já me ferrei com isso uma vez em relatório de vencimento, e o cliente percebeu antes de mim haha
Como calcular a idade de uma pessoa corretamente:
O post cita cálculo de idade lá no começo, então bora resolver isso direito
A tentação é pegar a diferença em milissegundos e dividir por um ano
Porém ano não é uma unidade fixa: tem ano bissexto no meio, e a conta começa a errar justamente em quem faz aniversário perto da data de hoje
O caminho seguro é comparar ano, mês e dia
function idade(nascimento, hoje = new Date()) {
let anos = hoje.getFullYear() - nascimento.getFullYear()
const difMes = hoje.getMonth() - nascimento.getMonth()
const aindaNaoFezAniversario =
difMes < 0 || (difMes === 0 && hoje.getDate() < nascimento.getDate())
if (aindaNaoFezAniversario) {
anos--
}
return anos
}
console.log(idade(new Date("1995-07-20T00:00:00")))
O if é o coração da função: se a pessoa ainda não fez aniversário neste ano, tira um ano da conta
Simples, sem biblioteca nenhuma, e funciona pra qualquer cadastro 😀
Moment.js em projeto novo: ainda vale?
Essa parte envelheceu desde que o artigo saiu, então se liga
Se tu está começando um projeto do zero hoje, não comece por ele
O próprio JavaScript ficou mais capaz pra data e hora, e boa parte dos casos do dia a dia (diferença, formatação, comparação) tu resolve com o que já vem na linguagem, sem instalar nada
Precisa de mais poder de fogo, tipo fuso horário sério e formatação pesada?
Aí a conversa cai nas alternativas: Luxon (que já está aqui no post), date-fns e Day.js aparecem como caminhos comuns pra quem quer sair do Moment
E se eu JÁ tenho Moment num projeto que roda?
Calma, não precisa sair migrando às pressas
Código antigo que funciona não vira urgência da noite pro dia
O combinado sensato é: nada novo entra com Moment, e o que já existe vai saindo aos poucos, arquivo por arquivo, sem parar a entrega
Uma atenção no retorno do diff():
O diff() do Luxon não te devolve um número solto
Ele devolve um objeto de duração, que sabe representar aquele intervalo em várias unidades
Na prática isso significa que jogar o resultado direto dentro de um console.log ou de uma tela pode não sair no formato que tu esperava
Antes de exibir, extraia a unidade que tu quer do objeto de duração conforme a documentação do Luxon
É o tipo de detalhe que passa batido em teste rápido e aparece feio na tela do usuário 😛
Leia também
Formações
Formação SAAS com IA
Tire usas ideias do papel criando softwares com IA, integre pagamentos e lance seu projeto!
- 291 aulas
- 18 projetos
- 24h 17min
Blog | Mais populares
As diferenças de var, let e const
Como fazer redirecionamento com PHP
Neste artigo você vai aprender a como fazer redirecionamento com PHP, utilizaremos abordagens fáceis de entender e de aplicar Fala programador(a), beleza? Bora aprender mais […]
Checklist de segurança n8n VPS pública: guia essencial para proteger sua instalação
Checklist de segurança n8n VPS pública: guia essencial para proteger sua instalação A popularidade da automação de processos com o n8n está em alta, principalmente […]
