Fóruns sobre PHP, JavaScript, HTML, MySQLi, jQuery, Banco de Dados, CSS


Moderador: web

 

Tempo passado  #resolvido

21-05-2007 16:06

Tenho um campo no bd chamado data que tm o tipo datetime entao a data fica assim: 2007-05-10 23:47:08

Preciso calcular quanto tempo ja se passou depois desta data, entao eu faço a consulta no bd pelo ultimo registro e pego a data, só que dai nao sei como fazer para se calcular quanto tempo ja se passou.

Preciso que o "output" seja neste formato: 12h02m55s
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17638
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Tempo passado

21-05-2007 16:27

Dá uma olhada nesse tópico
viewtopic.php?t=664
0
A melhor hospedagem para o seu site HostGator!
 

Tempo passado

21-05-2007 16:44

Web é isso mesmo, mas nao tenho a minima ideia de como fazer no meu caso, como posso fazer sendo que eu tenho a data neste formato:

2007-05-10 23:47:08

Ou seja, preciso saber os dias, horas, minutos e segundos, algo assim:
1d12h02m55s
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17638
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Tempo passado

21-05-2007 16:50

Seria + ou - isso?
<?php function tempo_passado($year, $month, $day, $hour, $minute) { $todayMonth = date(n); // mês atual $todayDay = date(j); // dia atual $todayHour = date(G); // hora atual $todayMinute = date(i); // minuto atual $monthday = date(nj); $link = $month.$day; $datepoint = $link; if ($monthday < $datepoint) $years = date(Y) - $year - 1; else $years = date(Y) - $year; if ($years < 1) $yearWord = ''; elseif ($years == 1) $yearWord = 'ano'; elseif ($years > 1) $yearWord = 'anos'; if ($todayMonth > $month) { if ($todayDay < $day) $months = $todayMonth - $month -1; else $months = $todayMonth - $month; } else { $between = $month - $todayMonth; $plus = 12 - $month; if ($todayDay < $day) $months = $month + $plus - $between -1; else $months = $month + $plus - $between; } if ($months == 1) $monthWord = 'mês'; elseif ($months > 1) $monthWord = 'meses'; if ($todayDay > $day) { if ($todayHour < $hour) $days = $todayDay - $day -1; else $days = $todayDay - $day; } else { $between = $day - $todayDay; $daysToEndOfMonth = date(t) - $day; if (date(t) == 28) $plus = $daysToEndOfMonth; if (date(t) == 29) $plus = $daysToEndOfMonth; if (date(t) == 30) $plus = $daysToEndOfMonth; if (date(t) == 31) $plus = $daysToEndOfMonth; if ($todayHour < $hour) $days = $day + $plus - $between - 1; else $days = $day + $plus - $between; } if ($days == 1) $dayWord = 'dia'; else $dayWord = 'dias'; if ($todayHour > $hour) { if ($todayMinute < $minute) $hours = $todayHour - $hour - 1; else $hours = $todayHour - $hour; } else { $between = $hour - $todayHour; $plus = 24 - $hour; if ($todayMinute < $minute) $hours = $hour + $plus - $between - 1; else $hours = $hour + $plus - $between; } if ($hours == 1) $hourWord = 'hora'; if ($hours > 1) $hourWord = 'horas'; if ($todayMinute > $minute) { $minutes = $todayMinute - $minute; } else { $between = $minute - $todayMinute; $plus = 60 - $minute; $minutes = $minute + $plus - $between; } if ($minutes == 60) $minutes = 0; if ($minutes == 1) $minuteWord = 'minuto'; elseif ($minutes > 1) $minuteWord = 'minutos'; if ($years == 0) { $years = ''; $yearWord = ''; } if ($months == 0) { $months = ''; $monthWord = ''; } if ($days == 0) { $days = ''; $dayWord = ''; } if ($hours == 0) { $hours = ''; $hourWord = ''; } if ($minutes == 0) { $minutes = ''; $minuteWord = ''; } echo $years.' '.$yearWord.' '.$months.' '.$monthWord.' '.$days.' '.$dayWord.' '.$hours.' '.$hourWord.' '.$minutes.' '.$minuteWord.''; } /* passe: ano | mês | dia | hora | minuto */ echo tempo_passado('2007', '04', '27', '10', '00'); ?>

0
A melhor hospedagem para o seu site HostGator!
 

Tempo passado

21-05-2007 20:55

Opa, é este mesmo está quase perfeito, poderia apenas adicionar tambem os segundos?
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17638
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Tempo passado

21-05-2007 21:49

Usa esse:
<?php function tempo_passado($year, $month, $day, $hour, $minute) { $todayMonth = date(n); // mês atual $todayDay = date(j); // dia atual $todayHour = date(G); // hora atual $todayMinute = date(i); // minuto atual $todaySecond = date(s); // segundo atual $monthday = date(nj); $link = $month.$day; $datepoint = $link; if ($monthday < $datepoint) $years = date(Y) - $year - 1; else $years = date(Y) - $year; if ($years < 1) $yearWord = ''; elseif ($years == 1) $yearWord = 'ano'; elseif ($years > 1) $yearWord = 'anos'; if ($todayMonth > $month) { if ($todayDay < $day) $months = $todayMonth - $month -1; else $months = $todayMonth - $month; } else { $between = $month - $todayMonth; $plus = 12 - $month; if ($todayDay < $day) $months = $month + $plus - $between -1; else $months = $month + $plus - $between; } if ($months == 1) $monthWord = 'mês'; elseif ($months > 1) $monthWord = 'meses'; if ($todayDay > $day) { if ($todayHour < $hour) $days = $todayDay - $day -1; else $days = $todayDay - $day; } else { $between = $day - $todayDay; $daysToEndOfMonth = date(t) - $day; if (date(t) == 28) $plus = $daysToEndOfMonth; if (date(t) == 29) $plus = $daysToEndOfMonth; if (date(t) == 30) $plus = $daysToEndOfMonth; if (date(t) == 31) $plus = $daysToEndOfMonth; if ($todayHour < $hour) $days = $day + $plus - $between - 1; else $days = $day + $plus - $between; } if ($days == 1) $dayWord = 'dia'; else $dayWord = 'dias'; if ($todayHour > $hour) { if ($todayMinute < $minute) $hours = $todayHour - $hour - 1; else $hours = $todayHour - $hour; } else { $between = $hour - $todayHour; $plus = 24 - $hour; if ($todayMinute < $minute) $hours = $hour + $plus - $between - 1; else $hours = $hour + $plus - $between; } if ($hours == 1) $hourWord = 'hora'; if ($hours > 1) $hourWord = 'horas'; if ($todayMinute == 0) { $todaySecond = $todaySecond; } if ($todayMinute > $minute) { $minutes = $todayMinute - $minute; } else { $between = $minute - $todayMinute; $plus = 60 - $minute; $minutes = $minute + $plus - $between; } if ($minutes == 60) $minutes = 0; if ($minutes == 1) $minuteWord = 'minuto'; elseif ($minutes > 1) $minuteWord = 'minutos'; if ($years == 0) { $years = ''; $yearWord = ''; } if ($months == 0) { $months = ''; $monthWord = ''; } if ($days == 0) { $days = ''; $dayWord = ''; } if ($hours == 0) { $hours = ''; $hourWord = ''; } if ($minutes == 0) { $minutes = ''; $minuteWord = ''; } echo $years.' '.$yearWord.' '.$months.' '.$monthWord.' '.$days.' '.$dayWord.' '.$hours.' '.$hourWord.' '.$minutes.' '.$minuteWord.' '.$todaySecond.' segundo(s)'; } /* passe: ano | mês | dia | hora | minuto */ echo tempo_passado('2007', '04', '27', '10', '00'); ?>

Ai é só usar um explode para separar a sua data para usar no echo acima.
0
A melhor hospedagem para o seu site HostGator!
 

Tempo passado

22-05-2007 08:32

Fiz, um teste e coloquei o dia de hoje e alguns minutos atraz:
echo tempo_passado('2007', '05', '22', '08', '40');

E ele me retornou isso:
12 meses 31 dias 24 horas 10 minutos 25 segundo(s)

Mas ta errado o certo seria me dizer apenas 10 minutos e 25 segundos
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17638
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Tempo passado

22-05-2007 18:01

Não tinha visto esse problema, veja esse outro.
<?php function CalcDiff($currTime, $origTime) { $showDiff = ''; $currTime = intval($currTime); $origTime = intval($origTime); if ($currTime<$origTime) { $diff = $origTime-$currTime; } else { $diff = $currTime-$origTime; } $yrs = floor($diff/31556926); if ($yrs > 0) { $diff = $diff - ($yrs*31556926); $showDiff .= "{$yrs} ano"; $showDiff .= $yrs>1 ? 's' : ''; } unset($yrs); $mos = floor($difference/2629743.83); if ($mos > 0) { $diff = $diff - ($mos*2629743.83); $showDiff .= empty($showDiff) ? '' : ', '; $showDiff .= "{$mos} mes"; $showDiff .= $mos>1 ? 'es' : ''; } unset($mos); $wks = floor($diff/604800); if ($wks > 0) { $diff = $diff - ($wks*604800); $showDiff .= empty($showDiff) ? '' : ', '; $showDiff .= "{$wks} semana"; $showDiff .= $wks>1 ? 's' : ''; } unset($wks); $days = floor($diff/86400); if ($days > 0) { $diff = $diff - ($days*86400); $showDiff .= empty($showDiff) ? '' : ', '; $showDiff .= "{$days} dia"; $showDiff .= $days>1 ? 's' : ''; } unset($days); $hrs = floor($diff/3600); if ($hrs > 0) { $diff = $diff - ($hrs*3600); $showDiff .= empty($showDiff) ? '' : ', '; $showDiff .= "{$hrs} hora"; $showDiff .= $hrs>1 ? 's' : ''; } unset($hrs); $mins = floor($diff/60); if ($mins > 0) { $diff = $diff - ($mins*60); $showDiff .= empty($showDiff) ? '' : ', '; $showDiff .= "{$mins} minuto"; $showDiff .= $mins>1 ? 's' : ''; } unset($mins); if ($diff > 0) { $showDiff .= empty($showDiff) ? '' : ', '; $showDiff .= "{$diff} segundo"; $showDiff .= $diff>1 ? 's' : ''; } unset($diff); if ($currTime<$origTime) { $showDiff = "- {$showDiff}"; } return $showDiff; } /* DATA PASSADA */ $timestamp = strtotime('2007-05-22 18:00:05'); /* DATA ATUAL */ $timestamp2 = strtotime(date("Y-m-d H:i:s")); echo CalcDiff($timestamp2, $timestamp); ?>

0
A melhor hospedagem para o seu site HostGator!
 

Tempo passado

22-05-2007 18:05

Nossa agora ficou perfeito!

Era asim mesmo que eu queria, se nao tiver dias, nao mostra o dia, etc... vlw :)
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17638
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Tempo passado

22-05-2007 18:05

:)
0
A melhor hospedagem para o seu site HostGator!
 

Tempo passado

22-05-2007 18:24

Um ultimo pedido :P

Tem como deixar apenas dias-horas-minutos-segundos ?

Este ultimo que voce passou esta show pq ele nao mostra os dias se nao estiver passado 1 dia ainda por ex.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17638
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Tempo passado

22-05-2007 21:19

Basta colocar um // antes da string que deseja bloquear em relação a ano, mês, etc...

$showDiff .= "{$yrs} ano";
$showDiff .= $yrs>1 ? 's' : '';

ai, fica assim:

// $showDiff .= "{$yrs} ano";
// $showDiff .= $yrs>1 ? 's' : '';
0
A melhor hospedagem para o seu site HostGator!
 

Tempo passado

22-05-2007 21:51

Eu ja tinha tentado assim mas ai deu erro:
$timestamp = strtotime('2006-05-22 18:37:05');

Mostra:
1 dia, 3 horas, 33 minutos, 27 segundos

Teria de ser variooooos dias.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17638
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Tempo passado

22-05-2007 22:26

Como são várias datas, tem q trabalhar com base nessas linhas:

$timestamp = strtotime('2007-05-22 18:00:05');

$timestamp2 = strtotime(date("Y-m-d H:i:s"));

echo CalcDiff($timestamp2, $timestamp);

Se tiver pegando as datas antigas ( $timestamp ) em um while ( do banco de dados ), bastar ter essas linhas acima, passando os dados da data antiga no formato do exemplo mostrado em $timestamp ( 2007-05-22 18:00:05 )
0
A melhor hospedagem para o seu site HostGator!
 

Tempo passado

23-05-2007 01:01

Achei esta funçao na net e funcionou certinho para o meu proposito.
<?php function tempo($starttime, $endtime){ $starttime=strtotime($starttime); $endtime=strtotime($endtime); $timediff = $endtime-$starttime; $days=intval($timediff/86400); $remain=$timediff%86400; $hours=intval($remain/3600); $remain=$remain%3600; $mins=intval($remain/60); $secs=$remain%60; if (strlen($mins)<2) { $mins = '0'.$mins; } if($days > 0) $dia = $days.'d'; if($hours > 0) $hora = $hours.'h'; if($mins > 0) $minuto = $mins.'m'; $segundo = $secs.'s'; $timediff = $dia.$hora.$minuto.$segundo; return $timediff; } echo tempo('2007-05-23 01:00:00',date("Y-m-d H:i:s")); ?>

Muito obrigado pela sua ajuda, seu forum é otimo!
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17638
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Tempo passado

23-05-2007 07:07

Vlw :)
0
A melhor hospedagem para o seu site HostGator!

Quem está online

Usuários navegando neste fórum: Bing [Bot]