A manipulação de datas é algo que constantemente gera dor de cabeça, ainda mais quando falamos de situações em que envolvam fusos horários, pensando nisto que vamos abordar neste post como calcular a diferença entre datas no MySQL.
Existem várias funções nativas no MySQL que nos permitem calcular a diferença entre duas datas, e também é possível criar nossas próprias funções para a execução do cálculo.
Para obtermos os melhores resultados, vamos utilizar a função TIMESTAMPDIFF, isto porque através dela é possível obter diversos resultados,
A função TIMESTAMPDIFF possui os seguintes parâmetros de entrada:
TIMESTAMPDIFF(tipo, data_inicial, data_final);
No campo tipo, são aceitos:
- Year, que apresentará a diferença em anos;
- Month, para meses;
- Day, para dias;
- Hour, para horas;
- Minute, para minutos;
- Second, para segundos.
Vamos aos exemplos:
Descobrindo a diferença em anos entre duas datas
SELECT TIMESTAMPDIFF(YEAR,'2020-01-01',NOW()) as anos;O resultado será:
anos
--------
2No exemplo, identificamos a quantidade de anos entre o ano de 2020 e o ano atual, que no caso é 2022, resultando assim em 2 anos de diferença.
Descobrindo a diferença em dias entre duas datas
SELECT TIMESTAMPDIFF(DAY,'2020-01-01',NOW()) AS dias;O resultado será:
dias
--------
920Novamente, calculamos a diferença entre 01/01/2020 e 09/07/2022, o que resulta em 920 dias de diferença.
Para os demais tipos, como meses, horas e etc, basta trocar o parâmetro.
O MySQL ainda dispõe de outra função para identificar a diferença em dias, a DATEDIFF, só que neste caso a função tem apenas dois parâmetros, data final e data inicial, inversamente ao exemplo inicial que colocamos a data mais antiga primeiro. O importante é, o resultado final é o mesmo.
SELECT DATEDIFF(NOW(),'2020-01-01') AS dias;Uma coisa em comum entre as duas funções quando estamos falando em dias é, ela retorna a quantidade em dias fechados, por exemplo, a diferença entre 01/07/2022 e 09/07/2022 é 8 ou 9 dias?
Para o MySQL será 8 dias, até porque tecnicamente é de fato 8 dias, pois, só completará 9 dias após fechar as 24 horas do dia 09.
Mas é comum em determinadas situações é necessário considerar 9 dias, e para isto podemos aplicar uma solução bem simples, somar 1 dia, vejamos:
SELECT TIMESTAMPDIFF(DAY,'2022-07-01','2022-07-09') + 1 AS dias;Pronto, problema resolvido.
Caso você precise saber a diferença entre meses, horas, minutos ou segundos, basta trocar o parâmetro tipo da função TIMESTAMPDIFF, ainda, você pode passar no parâmetro de data ela no formato completo, ou seja, com dia, mês, ano, hora, minuto e segundo.
Caso queira se aprofundar no tema, vou deixar dois outros conteúdos aqui do blog:
