Calcular diferença entre 2 datas com PHP

Esse Post foi movido para :

http://clares.com.br/2011/01/06/calcular-diferenca-entre-2-datas-com-php/

Desculpe pelo transtorno, aproveite para assinar o novo blog.

Marcado:, , , , ,

13 pensamentos sobre “Calcular diferença entre 2 datas com PHP

  1. Paulo abril 2, 2009 às 12:45 pm

    Cara, muito boa dica, valeu!

  2. Tata junho 10, 2009 às 12:41 pm

    É nesse momento que eu paro e penso: “Como é que eu não pensei nisso antes?!?!?!?!”

    xD
    Muito boa dica, TY!!

  3. TCL setembro 11, 2009 às 7:03 pm

    como faço para utilizar o tempo do sistema operacional para calcular o tempo que o usuario permanece na pagina

  4. guilherme setembro 24, 2009 às 2:28 am

    cara
    que dica EXCELENTE!
    muito obrigado!!!

  5. Marcos outubro 9, 2009 às 7:38 pm

    cara, muito util esse código mesmo, mas deu alguns problemas quanto ao ‘round’ que você deu nas variaveis, seria mais apropriado usar um ‘floor’, que foi o que eu usei aqi e funcionou muito bem.

  6. Paulo outubro 23, 2009 às 7:56 am

    Muito bom esse código, eu consegui rodá-lo tanto com o ROUND e o FLOOR deram certo! Deu um pequeno erro no “echo $dias.””;
    ” em diante… Resolvi com o corfome segue abaixo:

    PARABÉNS RAFAEL!!!

  7. Fabio Ferreira junho 29, 2010 às 1:32 pm

    Boas Rafael,
    Andava eu á procura desta função quando o Google me trás aqui novamente! :D
    eu precisava de uma função para saber os dias úteis da função sem fins de semana nem feriados e o seu post me ajudou muito! Obrigado mais uma vez…

    Deixo aqui a função para quem precisar:

    /**
    * Função que passado uma data conta quantos dias
    * úteis faltam (para datas no futuro) ou se passaram
    * (datas no passado) para o dia de hoje.
    * Se for passado o segundo parâmetro, calcula a diferença entre as duas data.
    **/

    function dias_uteis($datainicial, $datafinal=null) {
    if (!isset($datainicial))
    return false;
    if (!isset($datafinal))
    $datafinal = time();

    $segundos_datainicial = strtotime(preg_replace(“#(\d{2})/(\d{2})/(\d{4})#”, “$3/$2/$1”, $datainicial));
    $segundos_datafinal = strtotime(preg_replace(“#(\d{2})/(\d{2})/(\d{4})#”, “$3/$2/$1″, $datafinal));
    $dias = abs(floor(floor(($segundos_datafinal – $segundos_datainicial) / 3600) / 24));
    $uteis = 0;
    for ($i = 0; $i query($sql1);
    $totaldias = $db1->numRows();
    while ($db1->nextRecord()) {
    $w=$db1->getField(‘acti_9’);
    }

    if ($w == 0) {
    //echo date(‘d/m/Y’,$diai).” é Domingo”;
    } elseif ($w == 6) {
    //echo date(‘d/m/Y’,$diai).” é Sábado”;
    } else {
    //echo date(‘d/m/Y’,$diai).” é dia útil”;
    $uteis++;
    }
    }
    return $uteis;
    }

  8. Gabriel Machado Santos outubro 4, 2010 às 6:32 pm

    parabéns pelo post cara, muito bom.

  9. tsant novembro 18, 2010 às 7:50 pm

    Não funfou no exemplo abaixo… :(

    Alguma idéia???

    #setando a primeira data 28/02/2008
    $dia1 = mktime(0,0,0,28,02,2008);
    #setando segunda data 01/03/2008
    $dia2 = mktime(0,0,0,01,03,2008);
    #armazenando o valor da subtracao das datas
    $d3 = ($dia2-$dia1);
    #usando o roud para arrendondar os valores
    #converter o tempo em dias
    $dias = round(($d3/60/60/24));
    #converter o tempo em horas
    $hrs = round(($d3/60/60));
    #converter o tempo em minutos
    $mins = round(($d3/60));
    echo $dias.”;
    echo $hrs.”;
    echo $mins.”;

  10. Periscuelo janeiro 6, 2011 às 4:59 pm

    Abaixo vai um exemplo mais simples e eficiente de trabalhar com diferença entre datas:

    function diffDays($dateB, $dateS, $sep, $type=”){
    $date1 = explode($sep, $dateB);
    $date2 = explode($sep, $dateS);
    switch ($type) {
    case ‘years’:
    $Q = 31104000;
    break;
    case ‘months’:
    $Q = 2592000;
    break;
    case ‘days’:
    $Q = 86400;
    break;
    case ‘hours’:
    $Q = 3600;
    break;
    case ‘minutes’:
    $Q = 60;
    break;
    default:
    $Q = 1;
    }
    return floor(((mktime(0,0,0,$date1[1],$date1[2],$date1[0])-mktime(0,0,0,$date2[1],$date2[2],$date2[0]))/$Q));
    }

    $data1 = ‘2011-01-04’;
    $data2 = ‘2010-12-04′;

    echo diffDays($data1,$data2,’-‘,’days’);

    Basta testar ;)

    • Rafael Clares janeiro 6, 2011 às 5:04 pm

      Valeuuu, vou testar aqui e se for dhora mesmo vou colocar no post.

  11. João março 18, 2011 às 1:39 pm

    Olá,

    Só pra constar, a partir da versão 5.3 do PHP, um novo método foi adicionado à classe DateTime, o método diff, que serve justamente para calcular a diferença entre datas.

    http://www.uebbi.com/php-calcular-a-diferenca-entre-duas-datas

    • Rafael Clares abril 1, 2011 às 5:55 pm

      João, muito obrigado pela contribuição, é sempre bem-vinda! Pena que muitas aplicações são inviáveis para migrar por exemplo do 5 para 5.3 né…
      Valeu, um forte abraço!

Os comentários estão desativados.

%d blogueiros gostam disto: