Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá, estou criando um script para calcular a quanto tempo um post foi postado (por exemplo, 2 segundos atrás...), mas não estou conseguindo calcular corretamente...
Já tentei usar strtotime($dataatual)-strtotime($dataanterior), mas retornou um valor negativo (-1352194224), tentei usar só $dataatual-$dataanterior, mas também não deu certo, retornou o número 2.
O código que eu fiz está abaixo:
<?php
include("config.php");
$sql = mysql_query("SELECT * FROM posts ORDER BY id DESC LIMIT 5");
$dataatual = date('d/m/Y H:i:s');
$dataantiga = "12/03/2012 21:04:12";
while($row = mysql_fetch_array($sql)) {
$tempo = strtotime($datual)-strtotime($row['data']);
//Verifica o tempo restante em segundos e depois transforma em dias, meses, anos, etc...
if($tempo < 60) {
$tempo = $tempo . ".segundos";
} elseif($tempo > 59 && $tempo < 120) {
$tempo = $tempo/60 . ".minuto";
} elseif($tempo > 119 && $tempo < 3600) {
$tempo = $tempo/60 . ".minutos";
} elseif($tempo > 3599 && $tempo < 7200) {
$tempo = $tempo/60/60 . ".hora";
} elseif($tempo > 7199 && $tempo < 86400) {
$tempo = $tempo/60/60 . ".horas";
} elseif($tempo > 86399 && $tempo < 172800) {
$tempo = $tempo/60/60/24 . ".dia";
} elseif($tempo > 172799 && $tempo < 5184000) {
$tempo = $tempo/60/60/24 . ".dias";
} elseif($tempo > 5183999 && $tempo < 10368000) {
$tempo = $tempo/60/60/24/30 . ".mês";
} elseif($tempo > 10367999 && $tempo < 62208000) {
$tempo = $tempo/60/60/24/30/12 . ".meses";
} elseif($tempo > 62207999 && $tempo < 124416000) {
$tempo = $tempo/60/60/24/30/12/12 . ".ano";
} elseif($tempo > 124415999) {
$tempo = $tempo/60/60/24/30/12/12 . ".anos";
}
//Retira os "quebrados" da divisão
$tempo = explode('.', $tempo);
echo "há " . $tempo['0'] . " " . $tempo['2'] . " atrás \n";
}
?>
Como eu posso fazer?
Esses dias mesmo tava conversando com o @William Bruno a respeito.
Saiu isso aqui
Muito bom script, Evandro. Se quer um sugestão você poderia adaptá-lo para também suportar o formato "14/06/2012 11:35" (Que retorna uma exceção se usado) por ser o mais comum usado no Brasil. Basta converter o '-' por '/', já que "14-06-2012 11:35" funciona perfeitamente. Afora isso o nome da classe não me parece o mais apropriado, não seria melhor 'TimeAgo' ou 'DateDiff'?
@jacques030498: recomendo o script do Evandro.
BTW, eu cheguei agora à opinião que esse tipo de script fica melhor no front-end (javascript), pois pode ser atualizado ao vivo, sem precisar do recarregamento da página.
Muito bom script, Evandro. Se quer um sugestão você poderia adaptá-lo para também suportar o formato "14/06/2012 11:35" (Que retorna uma exceção se usado) por ser o mais comum usado no Brasil. Basta converter o '-' por '/', já que "14-06-2012 11:35" funciona perfeitamente.
Leia: http://br2.php.net/manual/function.strtotime.php#refsect1-function.strtotime-notes
Mais precisamente a terceira nota.
>
Afora isso o nome da classe não me parece o mais apropriado, não seria melhor 'TimeAgo' ou 'DateDiff'?
TimeAgo indica 'tempo passado'. O método também calcula tempo futuro, não vale.
DateDiff remete ao método já existente DateTime::diff() - PHP 5.3 - Causando ambiguidade e possível confusão.
Se verificar o commit anterior do gist, verá que ela foi baseada em uma tentativa utilizando exatamente DateTime::Diff. O segundo commit é um port compatível com PHP 5.2 e uma saída não tão completa, pois não era necessária.
BTW, eu cheguei agora à opinião que esse tipo de script fica melhor no front-end (javascript), pois pode ser atualizado ao vivo, sem precisar do recarregamento da página.
Podendo, inclusive, se valer do fuso-horário local.
A função strtotime não é compatível com este formato de hora. Para calcular a diferença entre duas datas você tem que primeiro transformar a data antiga em TIMESTAMP UNIX, que é equivalente ao número de segundos desde 1 de janeiro de 1970.
$dataantiga = "12/03/2012 21:04:12";
// Transformar a data antiga em timestamp
// int mktime ([ int $hora [, int $minuto [, int $second [, int $mes [, int $dia [, int $ano [, int $is_dst ]]]]]]] )
{
// função proveniente de: http://css-tricks.com/snippets/php/time-ago-function/
echo ago ($dataantiga);