Ir ao conteúdo
  • Cadastre-se

Subtração de datas com php


Posts recomendados

Bom pessoal, sou bem iniciante e estou quebrando a cabeça para fazer uma operação de datas no PHP.

O que eu quero é basicamente que o programa me retorne a quantidade de >dias< que faltam ou passaram para a revisão.

Só que eu preciso dos dias, se já passaram obviamente vai me retornar um valor negativo, se faltam dias para revisão vai me retornar um valor positivo.

O problema é como subtrair as datas. $proximarevisão - $hoje = XX dias.

Vejam o código:

$ulrev = date('d/m/Y H:i:s',strtotime('05/10/2015'));/* Última Revisão */
$proxrev = date('d/m/Y', strtotime("+1 year",strtotime($ulrev)));/* Próxima Revisão */
echo $proxrev; /*  Imprime corretamente 05/10/2016*/

 

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@pvmattos Quando eu fui estudar datas, eu cai no blog do thiago belem, ele exatamente explicar o que quer.

 

Na data final pode usar seu código e receber o final, e na inicial usar a atual.

 

<?php
// Define os valores a serem usados
$data_inicial = '2016-01-01';
$data_final = '2015-01-01';
// 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; //
// Calcula a diferença de dias
$dias = (int)floor( $diferenca / (60 * 60 * 24)); // -365 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 é de -365 dias

?>

font: http://blog.thiagobelem.net/calculando-a-diferenca-em-dias-entre-duas-datas

 

edit: Simplificando.

$dataInicial = strtotime("2016-09-12");
$dataFinal = strtotime("2015-09-12");
$total = $dataInicial - $dataFinal;
$dias = (int)floor($total / (60*60*24));

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

  • Moderador

@pvmattos Você pode fazer ainda de outra forma com menos linhas se quiser!

Usando o datetime diff.

 

Nesse caso possui duas formas.  Procedural e orientada a objetos.

por exemplo:

Orientada a objetos:

$dataInicial = new DateTime('2016-01-01');
$dataFinal = new DateTime('2015-01-01');
$diferenca = $dataInicial->diff($dataFinal);
echo $diferenca->format('%R%a dias');

OU podes fazer de forma procedural:

 

$dataInicial = date_create('2016-01-01');
$dataFinal = date_create('2015-01-01');
$diferenca = date_diff($dataInicial, $dataFinal);
echo $diferenca->format('%R%a dias');

Ambos precisam converter para String antes de mostrar em tela usando a função format() 

Que podes encontrar toda a documentação sobre ele aqui: http://php.net/manual/pt_BR/dateinterval.format.php

 

PS: dessa forma, você reduz e faz exatamente a mesma coisa que que o @FabianoS sugeriu!

O jeito dele não está errado. Só é mais "trabalhoso" :thumbsup:

 

Contudo, faria uma pequena mudança no seu código @FabianoS

Troque o  floor() por  round()  porque o floor() arredonda para baixo.. então se quiser um dia de diferença vai retornar zero pois ele arredondaria para baixo onde seria 23h

Com o round() ele arredonda precisamente.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...