Como calcular a diferença entre duas datas no PHP?

Já precisou calcular a diferença entre duas datas no PHP e acabou se frustrando pela quantidade de informações conflitantes que encontrou no Google? 😩

Neste artigo vamos tratar de maneira moderna como calcular a diferença entre duas datas em vários formatos de saída e o melhor, livre do bug do ano de 2038 o famoso “Y2K38 bug” . Ficou curioso? Vamos falar sobre ele também então fique conosco. 😁

Diferença entre duas datas em dias

Utilize a classe DateTime para instanciar um objeto de data que permite operar diversos métodos e cálculos relacionados a datas. Neste caso iremos utilizar o método diff que calcula a diferença entre duas datas.

<?php 

$data_a  = new DateTime("2021-01-01");
$data_b = new DateTime("2022-04-05");
$intervalo = $data_a->diff($data_b);

echo "Exbindo detalhadamente:";
echo "\n";
echo $intervalo->y . " ano, " . $intervalo->m." meses e ".$intervalo->d." dias "; 

echo "\n";
echo "\n";

echo "Exibindo apenas em dias:";
echo "\n";
echo $intervalo->days . " dias ";

/* SAÍDA */

/*
Exbindo detalhadamente:
1 ano, 2 meses e 3 dias 

Exibindo apenas em dias:
428 dias 
*/

?>

Bug de 2038 (Y2K38)

Pode ser que o bug Y2K38 não seja tão conhecido por diversos desenvolvedores. Então fique atento, pois ele irá quebrar diversas aplicações que não forem corrigidas!

O problema do ano de 2038, normalmente denominado “Bug Unix Millennium” com a sigla Y2K38 (Y significa Ano, 2K para 2000 e 38 para o ano) faz com que softwares falhem quando tentem processar datas posteriores à 19 de janeiro de 2038 .

O problema afeta todos os softwares e sistemas (incluindo PHP) que armazenam a hora do sistema como um número inteiro de 32 bits e interpretam esse número com o número de segundos desde 00:00:00 UTC em 1 de janeiro de 1970.

O problema ocorre pela forma como o computador conta e armazena o tempo em segundos. Como os sistemas baseados em Unix medem o tempo em segundos a partir de 1º de janeiro de 1970, 03:14:07 UTC quando for 19 de janeiro de 2038ele tera o valor de 2.147.483.647 segundos.

Ai começa o problema, pois dada uma variável armazenada em seu sistema com data e hora no formato 32 bits, tal variável só poderá armazenar até 2.147.483.647 valores positivos separados, o que significa que o sistema não pode continuar contando os segundos após esse tempo.

Recapitulando

E ai o que achou desta postagem, acha que precisa melhorar em algo? Não entendeu alguma parte ou encontrou algum erro? Deixe um comentário.

Related posts

Leave a Comment