Diferenças entre datas em PHP

Agosto 13, 2008 on 12:39 pm | In Informatica, php, Tutorial |

Bom vou escrever um tutorial simples para escrever uma função que vai calcular a diferença entre duas datas e retornar a diferença em semanas, dias, horas, minutos e segundos. Vamos lá.

Primeiramente a menira mais simples de fazer essa diferença é trabalhar com a data em padrão Unix Timestamp, mas o que é isso ?! Unix Timestamp nada mais é que a nossa data passada para segundos. Então com essa idéia, a diferença entre as duas datas será também em segundo, o que precisamos é converter para saber quantas horas/dias/minutos... enfim, vamos a função bem comentada:

PHP:
  1. function data_diff($data, $data1 = 0){
  2.  
  3. // mktime() retorna UNIX STIMESTAMP atual
  4. if(!$date1)
  5. $date1 = mktime();
  6.  
  7. $diferenca = array('segundos'  => '','minutos'  => '','horas'    => '','dias'     => '','semanas'    => '');
  8.  
  9. if($date1> $date)
  10. $tmp = $date1 - $date;
  11. else
  12. $tmp = $date - $date1;
  13. // Após a conta acima teremos o restando em segundos (unix timestamp)
  14. // Bastando as contas para preencher nossa array e retonar separados os restantes
  15.  
  16. // Calculo de semanas apartir do numero de segundos começando do maior para o menor, pois cada valor calculado é retirado a porção
  17. // Exemplo se achou 3 semanas é retirado (3 * 604800) para que quando calcular dias so estejam os segundos referentes aos dias e assim por diante
  18. $diferenca['semanas'] = floor($tmp/604800);
  19. $tmp -= $diferenca['semanas'] * 604800;
  20.  
  21. $diferenca['dias'] = floor($tmp/86400);
  22. $tmp -= $diferenca['dias'] * 86400;
  23.  
  24. $diferenca['horas'] = floor($tmp/3600);
  25. $tmp -= $diferenca['horas'] * 3600;
  26.  
  27. $diferenca['minutos'] = floor($tmp/60);
  28. $tmp -= $diferenca['minutos'] * 60;
  29.  
  30. $diferenca['segundos'] = $tmp;
  31.  
  32. return $diferenca;
  33. }

Caso você tenha a data no formato que for, utilize a função mktime do PHP para transformar a data em unix timestamp, antes de enviar para a função.


1 Comment »

RSS feed for comments on this post. TrackBack URI

  1. Teve uma vez que precisei fazer isto mas fiz um pouco diferente, não me lembro direito mas do jeito que tá aí parece bem simples.

    Comment by OiYes — Setembro 15, 2008 #

Leave a comment

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>


 

 Assine o feed