PHP DateTime Diff Calculando diferença de dias entre datas

function calculateDiffInDays(string $date1, string $date2) {
  $datetime1 = new \DateTime($date1);
  $datetime2 = new \DateTime($date2);
  
  return $datetime1->diff($datetime2)->days;
}

echo calculateDiffInDays('1970-08-25', '2020-12-30');
// 18390
echo calculateDiffInDays('2020-12-30', '1970-08-25');
// 18390

Recentemente precisei ajustar um processo que já fazia um cálculo de diferença de dias entre datas e me deparei com um código bem similar a este, só que não funcionava.

Daí fui pesquisar a boa e velha documentação do PHP e encontrei a falha.

Primeiro vamos esclarecer que o DateTime::diff retornar um DateInterval o qual então pode ser formatado de várias formas… https://www.php.net/manual/en/class.dateinterval.php

Observe que days representa o total de número de dias entre a primeira e segunda datas e isso significa dizer que o resultado será um número inteiro.

Enquanto isso d representa simplesmente um possível dia, ou seja, será um número entre 0 e 30 pois o cálculo é feito levando em conta apenas a porção dia. Assim a hipótese para o maior resultado seria o dia 31 menos o dia 01 sendo o resultado 30.

Então, o código original com o qual me deparei formatava o resultado usando a tag ->d quando na verdade deveria estar utilizando ->days para obter a diferença total de dias.

return $datetime1->diff($datetime2)->d;

Confesso que apenas lendo a documentação fica difícil de ter certeza do resultado assim de imediato. Como sempre com PHP um teste rápido é o seu melhor aliado.

Mas todos nós sabemos que o PHP faz o que é preciso fazer ou faz o que a gente quer que ele faça, não importa.

O que algumas pessoas costumam usar para criticar o PHP, na verdade é o que eu mais gosto nele!