Como calcular a diferença entre duas datas usando PHP
-
Utilize
strtotime()
para calcular a diferença entre duas datas para a versão do PHP abaixo de 5.3 -
Utilize
DateTime()
eDateInterval()
Objetos para PHP 5.3 e Acima
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
- Como adicionar dias em PHP
- Como Converter DataTime em String em PHP
- Como converter String para Data e Data/Hora em PHP
- Como converter um formato de data em outro em PHP
- Como obter a data e hora atual em PHP