ESSE POST FOI ATUALIZADO EM: http://clares.com.br/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,
Cara, muito boa dica, valeu!
É nesse momento que eu paro e penso: “Como é que eu não pensei nisso antes?!?!?!?!”
xD
Muito boa dica, TY!!
como faço para utilizar o tempo do sistema operacional para calcular o tempo que o usuario permanece na pagina
cara
que dica EXCELENTE!
muito obrigado!!!
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.
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!!!
Boas Rafael,
Andava eu á procura desta função quando o Google me trás aqui novamente! 😀
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;
}
parabéns pelo post cara, muito bom.
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.”;
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 😉
Valeuuu, vou testar aqui e se for dhora mesmo vou colocar no post.
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
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!