Calculando o Número de Dias Entre Datas em JavaScript
Resposta Rápida
const data1 = new Date('2023-01-01');
const data2 = new Date('2023-01-31');
const diffDias = (data2 - data1) / (1000 * 60 * 60 * 24);
console.log(diffDias); // Saída: 30
Para calcular a diferença em dias entre duas datas em JavaScript, você precisa criar objetos Date
, subtrair a primeira data da segunda e, em seguida, dividir o resultado pelo número de milissegundos em um dia, o que lhe dará a diferença exata.
Considerando Fuso Horário e Horário de Verão
É essencial ter em mente os efeitos dos fusos horários locais e do horário de verão. Para garantir a consistência dos resultados, é recomendável usar datas no formato UTC:
const data1 = new Date(Date.UTC(2023, 0, 1)); // 1 de janeiro de 2023
const data2 = new Date(Date.UTC(2023, 0, 31)); // 31 de janeiro de 2023
const diffDiasUTC = (data2 - data1) / (1000 * 60 * 60 * 24);
console.log(diffDiasUTC); // Saída: 30. Apenas mais um dia útil.
Anos Bissextos São Considerados?
As características dos anos bissextos, como o dia extra em fevereiro a cada quatro anos, são automaticamente levadas em conta ao usar a função Date.UTC
.
Visualização
Vamos considerar duas datas como timestamps que marcam dias específicos no calendário:
Timestamp 1 (📅): 10 de janeiro de 2023
Timestamp 2 (📅): 15 de janeiro de 2023
A diferença em dias será:
(📅) - (📅) = 🗓️ 5 dias
Para nós, isso é um cálculo simples, enquanto o JavaScript trata essas datas como objetos Date
.
Torne Seus Cálculos Funções Reutilizáveis
Profissionais preferem usar funções reutilizáveis em vez de copiar código. Isso não só é mais elegante, mas também mais eficiente e confiável. Aqui está um exemplo:
function diasEntre(dataInício, dataFim) {
if (!(dataInício instanceof Date) || !(dataFim instanceof Date)) {
throw new Error('Por favor, utilize objetos Date válidos.');
}
const diffTempo = Math.abs(Date.UTC(dataFim.getFullYear(), dataFim.getMonth(), dataFim.getDate()) -
Date.UTC(dataInício.getFullYear(), dataInício.getMonth(), dataInício.getDate()));
const diffDias = Math.round(diffTempo / (1000 * 60 * 60 * 24));
return diffDias;
}
const dataInício = new Date('2023-01-01');
const dataFim = new Date('2023-01-31');
console.log(diasEntre(dataInício, dataFim)); // Saída: 30. O tempo não espera por ninguém.
Sua função diasEntre
se tornará uma ferramenta confiável que considera com precisão todas as nuances ao calcular os dias.
Lidando com Casos Especiais
Casos complicados no código, assim como na vida, exigem previsão e soluções cuidadosas. Estes incluem:
- Inserir datas idênticas,
- Formatos de data inválidos,
- Situações em que a data final precede a data de início.
Siga a regra de ouro da programação: trate todas as exceções de forma elegante, fornecendo mensagens de erro claras e orientando de forma eficiente a entrada de dados corretos.
Recursos Úteis
- Date - JavaScript | MDN — documentação sobre o objeto
Date
. - Como Calcular o Número de Dias Entre Duas Datas? - Stack Overflow — discussões e soluções para calcular dias entre datas.
- Referência do Objeto Date em JavaScript — métodos
Date
com exemplos. - Tudo Sobre Datas em JavaScript | CSS-Tricks — um guia completo para trabalhar com datas.
- date-fns — uma biblioteca moderna para manipulação de datas em JavaScript.
- Moment.js — uma biblioteca popular para manipulação de datas: análise, validação, manipulação e exibição.