Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal,
Estou fazendo uma query no BD e pega a data o item (timestamp) - a now() (atual) e subtrai um pelo o outro:
Ex.: select unix_timestamp(now()) - lastchange as time from table where;
+--------+
| time |
+--------+
| 187334 |
+--------
O que eu preciso fazer é transforma esse valor em dias, horas e minutos:
Ex.: 1d 2h 3m
Sei que um dia tem 86400 segundos.
Para que eu possa transformar para dias eu já sei:
((187334/60)/60)/24 = 2,17
Agora como transformar os ,17 em horas e minutos?
Fiz da seguinte forma:
if (( $x["clock"] > 86400) && ($x["clock"] < 2592000)){
/ Numero de segundos num dia 86400 - divide o valor pelo segundos de um dia e pega o numero inteiro /
$dias=(int)($x["clock"]/86400);
/** Numero de segundos numa hora 3600 - multiplaca os dias pelo o os segundo e diminui do total e depois divide por 3600 **/
$horas= (int)(($x["clock"]-($dias*86400))/3600);
/** Numero de segundos num minuto 60 - multiplaca as horas pelo os segundo e diminui do total e depois divide por 60 **/
$gets=($x["clock"]-($dias*86400));
$minutos= (int) (($gets-($horas*3600))/60);
$TPL->assign("TIME", $dias."d ".$horas."h ".$minutos."m");
}elseif (( $x["clock"] > 2592000) && ($x["clock"] < 31536000)){
$TPL->assign("TIME", "mes");
}elseif ( ($x["clock"] > 31536000))
$TPL->assign("TIME", "ano");
else{
$horas = (int) ($x["clock"]/3600);
$minutos = (int)(($x["clock"]-($horas*3600))/60);
$gets=($x["clock"]-($horas*3600));
$segundos= (int) (($gets-($minutos*60)));
$TPL->assign("TIME", $horas."h ".$minutos."m ".$segundos."s");
}
Use TIMESTAMPDIFF( SECOND, UNIX_TIMESTAMP(NOW()), lastchange ) as tempo, esta função te dará os segundos, você usa MOD(tempo, 86400) para saber quantos segundos excedem a quantidade de dias (100000 segundos equivalem a 1 dia e 13600 segundos, o resultado de MOD( 100000, 86400 ) = 13600), subtraia o resultado do MOD do total de tempo e divida por 86400 para descobrir a quantidade de dias, depois use o resultado no MOD na função TIME() para converter o tempo em horas.
Algo semelhante a isso:
FROM tabela