Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the breadcrumb-navxt domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home/devtools/public_html/blog/wp-includes/functions.php on line 6131

Deprecated: A função WP_Dependencies->add_data() foi chamada com um argumento que está obsoleto desde a versão 6.9.0! Os comentários condicionais do IE são ignorados por todos os navegadores compatíveis. in /home/devtools/public_html/blog/wp-includes/functions.php on line 6131
Diferença entre datas no MySQL

Diferença entre datas no MySQL

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  
--------
       2

No 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  
--------
     920

Novamente, 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:

Deixe um comentário