Calcular diferença entre 2 datas com PHP

Publicado: fevereiro 10, 2008 em PHP
Tags:, , , , ,

ESSE POST FOI ATUALIZADO EM: http://clares.wordpress.com/2011/01/06/calcular-diferenca-entre-2-datas-com-php/

Por favor visite o link acima, está mais simples !!!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Diferença entre datas com a função mktime()

Um exemplo simples de como calcular a diferença entre 2 datas utilizando o php, como bem sabemos um dia possui 24 horas que equivale a (24 * 60  * 60) igual á 86400.

A função mktime recebe os argumentos (hora, minuto, segundos, mes, dia, ano).

<?php
#setando a primeira data  10/01/2008
$dia1 = mktime(0,0,0,01,10,2008);
#setando segunda data 10/02/2008
$dia2 = mktime(0,0,0,02,10,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));
#exibindo  dias | repudizira na tela 31
echo $dias.”<br>”;

#exibindo  horas | repudizira na tela 744
echo $hrs.”<br>”;

#exibindo  minutos | repudizira na tela 44640
echo $mins.”<br>”;
?>

Importante lembrar que acima hrs é o total de horas entre as duas datas e o mesmo para minutos.

Para tornar o exemplo útil você precisa setar de forma dinâmica os valores para $dia1 e $dia2, como exemplo imagine que seu sistema grava a data (mktime) de um post e faça o calculo do (diaAtual – diadoPost).

Dica:

Para passar para o formato comum uma data em mktime() use o date como abaixo:
echo date(‘d/m/Y’,$dia2);

Até logo,

Comentários
  1. Paulo disse:

    Cara, muito boa dica, valeu!

  2. Tata disse:

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

    xD
    Muito boa dica, TY!!

  3. TCL disse:

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

  4. guilherme disse:

    cara
    que dica EXCELENTE!
    muito obrigado!!!

  5. Marcos disse:

    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 disse:

    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 disse:

    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. parabéns pelo post cara, muito bom.

  9. tsant disse:

    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 disse:

    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 ;)

  11. João disse:

    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

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Sair / Alterar )

Imagem do Twitter

You are commenting using your Twitter account. Sair / Alterar )

Foto do Facebook

You are commenting using your Facebook account. Sair / Alterar )

Connecting to %s