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.