Ir ao conteúdo
  • Cadastre-se
pvmattos

Subtração de datas com php

Recommended Posts

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

Compartilhar este post


Link para o post
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));

 

Editado por FabianoS
  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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.

Editado por dif
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×