Calculando a diferença em dias entre duas datas com PHP

Fala pessoal! Hoje vou explicar como calcular a diferença (em dias) entre duas datas no PHP.

O processo é bem simples e se resume a criar o timestamp dessas datas e depois calcular o número de dias baseando-se na quantidade de segundos entre as duas datas.

Vou mostrar como fazer o processo de duas formas pois, normalmente, trabalhos com datas em dois formatos: DD/MM/AAAA (padrão brasileiro) eAAAA-MM-DD (formato do MySQL).

Se alguém aí quiser ler um pouco mais sobre como trabalhar com datas no PHP é só dar uma olhada nesse post: Trabalhando com datas no PHP.

Vamos ao primeiro exemplo que usa datas no formato DD/MM/AAAA:

<?php
// Define os valores a serem usados
$data_inicial = 23/03/2009;
$data_final = 04/11/2009;
// Cria uma função que retorna o timestamp de uma data no formato DD/MM/AAAA
function geraTimestamp($data) {
$partes = explode(/, $data);
return mktime(0, 0, 0, $partes[1], $partes[0], $partes[2]);
}
// Usa a função criada e pega o timestamp das duas datas:
$time_inicial = geraTimestamp($data_inicial);
$time_final = geraTimestamp($data_final);
// Calcula a diferença de segundos entre as duas datas:
$diferenca = $time_final $time_inicial; // 19522800 segundos
// Calcula a diferença de dias
$dias = (int)floor( $diferenca / (60 * 60 * 24)); // 225 dias
// Exibe uma mensagem de resultado:
echo A diferença entre as datas .$data_inicial. e .$data_final. é de <strong>.$dias.</strong> dias;
// A diferença entre as datas 23/03/2009 e 04/11/2009 é de 225 dias

Vou explicar de forma rápida: Primeiro criamos uma função para gerar o timestamp de uma data usando a função mktime() do PHP. Depois nós dividimos o número de segundos (diferença das duas datas) pelo número de segundos existentes em um dia (60 * 60 * 24 = 86400) e arredondamos o resultado usando a função floor().

Essa aplicação pode parecer complicada pra alguns mas ela utiliza um passo-a-passo muito claro pra quem consegue entender o processo de se calcular a diferença de dias entre duas datas. É só pensar em como você pode fazer isso e vai descobrir que não há forma melhor. 😉

Com isso você já consegue calcular a diferença e se usar um pouquinho de criatividade pode calcular também a diferença de horas e minutos.

O exemplo do formato AAAA-MM-DD é mais simples:

<?php
// Define os valores a serem usados
$data_inicial = 2009-03-23;
$data_final = 2009-11-04;
// Usa a função strtotime() e pega o timestamp das duas datas:
$time_inicial = strtotime($data_inicial);
$time_final = strtotime($data_final);
// Calcula a diferença de segundos entre as duas datas:
$diferenca = $time_final $time_inicial; // 19522800 segundos
// Calcula a diferença de dias
$dias = (int)floor( $diferenca / (60 * 60 * 24)); // 225 dias
// Exibe uma mensagem de resultado:
echo A diferença entre as datas .$data_inicial. e .$data_final. é de <strong>.$dias.</strong> dias;
// A diferença entre as datas 23/03/2009 e 04/11/2009 é de 225 dias

Nesse exemplo não precisamos criar uma função pois a função strtotime()do PHP já converte uma data no formato AAAA-MM-DD em timestamp.

Atenção: Não fiz nenhuma validação para caso as datas inseridas sejam inválidas ou a data final seja maior que a data inicial. Meu intuito era mostrar apenas como é o processo do calculo dessa diferença. 😉

Espero que essa aula tenha sido útil pra vocês… Qualquer dúvida ou sugestão é só comentar ou mandar um e-mail.

Até a próxima

Documentação Oficial:

  • Função [explode()](http://br.php.net/explode) » Divide uma string usando um separador
  • Função [mktime()](http://br.php.net/mktime) » Gera um timestamp de uma data especificada
  • Função [floor()](http://br.php.net/floor) » Arredonda valores fracionados para baixo
  • Função [strtotime()](http://br.php.net/strtotime) » Converte datas textuais em timestamps