Como calcular a diferença entre duas datas usando PHP

Ralfh Bryan Perez 30 janeiro 2023
  1. Utilize strtotime() para calcular a diferença entre duas datas para a versão do PHP abaixo de 5.3
  2. Utilize DateTime() e DateInterval() Objetos para PHP 5.3 e Acima
Como calcular a diferença entre duas datas usando PHP

Há várias maneiras de calcular a diferença entre duas datas usando PHP. Este artigo mostrará como usar a versão <5.3 do PHP e o método mais novo e mais confiável para a versão mais recente (>5.3) para calcular a diferença entre as datas.

Utilize strtotime() para calcular a diferença entre duas datas para a versão do PHP abaixo de 5.3

O strtotime() converte duas datas em tempo UNIX e calcula o número de segundos a partir delas. A partir disto, é mais fácil calcular diferentes métodos utilizando segundos. A função aceita um parâmetro de string em inglês que mostra a descrição da data/hora.

Exemplo:

$firstDate = "2019-01-01";
$secondDate = "2020-03-04";

$dateDifference = abs(strtotime($secondDate) - strtotime($firstDate));

$years  = floor($dateDifference / (365 * 60 * 60 * 24));
$months = floor(($dateDifference - $years * 365 * 60 * 60 * 24) / (30 * 60 * 60 * 24));
$days   = floor(($dateDifference - $years * 365 * 60 * 60 * 24 - $months * 30 * 60 * 60 *24) / (60 * 60 * 24));

echo $years." year,  ".$months." months and ".$days." days";

//output: 1 year, 2 months and 3 days

O exemplo acima mostra a diferença de duas datas utilizando várias funções como abs(), floor() e principalmente a strtotime().

O strtotime() obtém o valor UNIX das datas em segundos e utilizando abs() para ter o valor absoluto da primeira data.

A função floor() é utilizada para arredondar os segundos para o número inteiro mais próximo.

Para obter o ano, multiplicar 365 dias por 60 minutos, 60 segundos e 24 horas, e depois dividi-lo pela diferença.

Para obter os meses, multiplicar 30 dias a 60 minutos, 60 segundos e 24 horas e dividi-lo pela diferença da diferença da data multiplicada pelo ano e 365 dias, 60 minutos, 60 segundos e 24 horas.

Depois, para obter a diferença do dia, multiplicar 60 minutos, 60 segundos e 24 horas e dividi-la pela diferença da data, produto dos anos, 365 dias, 60 minutos, 60 segundos e 24 horas e os produtos dos meses, 30 dias, 60 minutos e 60 segundos e 24 horas.

Finalmente, junte tudo isso em uma variável para imprimir a diferença final.

Utilize DateTime() e DateInterval() Objetos para PHP 5.3 e Acima

Este método é um estilo orientado a objetos para obter a diferença entre duas datas, este também é o mais fácil, já que não requer o cálculo manual das datas e é recomendado já que é da versão mais recente do PHP.

Exemplo:

$firstDate  = new DateTime("2019-01-01");
$secondDate = new DateTime("2020-03-04");
$intvl = $firstDate->diff($secondDate);

echo $intvl->y . " year, " . $intvl->m." months and ".$intvl->d." day"; 
echo "\n";
// Total amount of days
echo $intvl->days . " days ";

//output: 1 year, 2 months and 1 day
//        428 days

No exemplo acima, ao contrário de utilizar strtotime() e mais outras funções e cálculos, os objetos DateTime() e DateInterval() tornaram mais fácil.

Primeiro, declare as datas utilizando new DateTime(). Em seguida, obter o valor inteiro da diferença utilizando o objeto DateInterval() diff() na primeira data e passar a segunda data como parâmetro.

Então, finalmente, para obter o year basta utilizar o objeto y. Utilize m para obter os meses e d para o dia.

Artigo relacionado - PHP Date

Artigo relacionado - PHP DateTime