Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
e ai pessoal,
alguém sabe como devo procurar ou tem um script pronto que informa quanto tempo passou após a data atual, tipo o do orkut ou twitter..
assim: postado a 2 dia atras | postado 3 horas atras | postado 5 minutos atras..
e ai?
eu estou tentando algo, ainda não esta como eu gostaria... se alguem puder ajudar..
<?php
setlocale(LC_ALL, "pt_BR", "pt_BR.iso-8859-1", "pt_BR.utf-8", "portuguese");
date_default_timezone_set('America/Sao_Paulo');
$diaH = date('d');
$mesH = date('m');
$anoH = date('Y');
$horaH = date('H');
$minH = date('i');
$segH = date('s');
$ano = 2011;
$mes = 7;
$dia = 21;
$hora = 13;
$min = 43;
$seg = 21;
if ($anoH > $ano) {
$anos = $anoH - $ano . ' anos atras';
} elseif ($mesH > $mes) {
$meses = $mesH - $mes . ' meses atras';
} elseif ($diaH > $dia) {
$dias = $diaH - $dia . ' dias atras';
} elseif ($horaH > $hora) {
$horas = $horaH - $hora . ' horas atras';
} elseif ($minH > $min) {
$mins = $minH - $min . ' minutos atras';
} elseif ($segH > $seg) {
$segs = $segH - $seg . ' segundos atras';
} else {
echo 'postado agora';
}
echo @$anos .'<br />';
echo @$meses .'<br />';
echo @$dias .'<br />';
echo @$horas .'<br />';
echo @$mins .'<br />';
echo @$segs .'<br />';Nao entendi..más não está calculando da forma correta é isso?
>
Nao entendi..más não está calculando da forma correta é isso?
o resultado esta correto sim.
Opa! Ae dei uma modificada, veja se agora tá quase do jeito que você quer...
$diaH = date('d');
$mesH = date('m');
$anoH = date('Y');
$horaH = date('H');
$minH = date('i');
$segH = date('s');
$ano = 2011;
$mes = 7;
$dia = 21;
$hora = 13;
$min = 43;
$seg = 21;
echo 'hora postada :'.$hora.':'.$min.':'.$seg;
echo '<br>hora atual :'.$horaH.':'.$minH.':'.$segH.'<br>';
if ($anoH > $ano) {
$retorno .= $anoH - $ano . ' anos atras';
}
if ($mesH > $mes) {
$retorno .= $mesH - $mes . ' meses atras';
}
if ($diaH > $dia) {
$retorno .= $diaH - $dia . ' dias atras';
}
if ($horaH > $hora) {
$retorno .= $horaH - $hora . ' horas atras, ';
$retorno .= ($minH - $min)*(-1) . ' minutos e ';
$retorno .= ($segH - $seg) * (-1) . ' segundos';
}
echo $retorno.'<br />';
No caso eu condicionei para se hora atual for maior que a postada, más ae você acrescenta mais condições...
ta do jeito que eu precisava, mas não entendi porque você fez minh - min * -1. e tambem quando esta um dia atras ele só mostra 12 horas atras quando teria que mostrar 1 dia xx hora xx minutos atras.
faz assim, na variável $dia coloca 20 e você vai entender.
Coloquei o (-1) para positivar o valor, senão ele retornaria um negativo ex -10;
Então eu fiz uma parte pra você ter uma idéia dae é só continuar a lógica com as outras condições como ano,mes,dia. É divertido você vai curtir..
Eu vi aonde você falou..e se o valor for positivo, dae entao ficará negativo, ali é só colocar um if para ver se o valor é menor q zero dae corrigi esse bug.
dei uma trabalhada no script, mas não sei se esta o mais lógico possível, uma coisa que tá me chateando é o fato de por exemplo:
se eu nasci em 28/12/84, era para ele mostrar 26 anos, 6 meses, sei la quantos dias, 5 horas e 2 minutos atrás.
mas ele calcula o ano como sendo o ano, sem levar em conta que enquanto não chegar no mes 12 ainda não será mais um ano, isso ainda não consegui corrigir...
veja como esta.
<?php setlocale(LC_ALL, "pt_BR", "pt_BR.iso-8859-1", "pt_BR.utf-8", "portuguese"); date_default_timezone_set('America/Sao_Paulo'); $diaH = date('d'); $mesH = date('m'); $anoH = date('Y'); $horaH = date('H'); $minH = date('i'); $segH = date('s'); $ano = 2010; $mes = 8; $dia = 6; $hora = 10; $min = 10; $seg = 10; echo 'hora postada :'.$hora.':'.$min.':'.$seg; echo '<br>hora atual :'.$horaH.':'.$minH.':'.$segH.'<br>'; if ($anoH == $ano) { $retorno .= ''; } elseif (($anoH - 1) == $ano) { @$retorno .= ' 1 ano, '; } else { @$retorno .= $anoH - $ano . ' anos, '; } if ($mesH == $mes) { $retorno = ''; } elseif (($mesH - 1) == $mes) { @$retorno .= ' 1 mês, '; } else { @$retorno .= $mesH - $mes . ' meses, '; } if ($diaH == $dia) { $retorno = ''; } elseif (($diaH - 1) == $dia) { @$retorno .= ' 1 dia, '; } else { @$retorno .= $diaH - $dia . ' dias, '; } if ($horaH == $hora) { $retorno = ''; } elseif (($horaH - 1) == $hora) { @$retorno .= ' 1 hora, '; } else { @$retorno .= $horaH - $hora . ' horas, '; } if ($minH == $min) { $retorno = ''; } elseif (($minH - 1) == $min) { @$retorno .= ' e 1 minuto '; } else { @$retorno .= ' e ' . ($minH - $min) * -1 . ' minutos '; } echo $retorno.' atras';ve c te ajuda!!!
require_once("conections/PDOconfig.php");
//select no DB
$sql = "SELECT * FROM tbnoticias ";
$selected = $conn->query($sql);
$Obj = $selected -> fetch (PDO::FETCH_OBJ);
$data_bd = date('d/m/Y',strtotime($Obj ->dataAdd));//data do banco de dados
$date = date('d/m/Y');
$hr_db = date('H:i',strtotime($Obj ->dataAdd));//horas do banco de dados
$hora = date('H:i');
$hr_db = explode(':',$hr_db);
$hora = explode(':',$hora);
$data_bd= explode('/',$data_bd);
$date = explode('/',$date);$minutosAT = $hora[1];
$minutosDB = $hr_db[1];
$hrAT = $hora[0];
$hrDB = $hr_db[0];
$dAT = $date[0];
$dDB = $data_bd[0];
$anoAT = $date[2];
$anoDB = '1988';//resgatar do banco
echo '<pre>';
$m = ($minutosAT - $minutosDB)*(-1).' Minutos';
$h = ($hrAT - $hrDB).' Horas';
$d = ($dAT - $dDB).' Dias';
$n = ($anoDB - $anoAT)*(-1).' Anos';
print_r($data_bd).'<br />'; //printa array data do BAnco
print_r($date).'<br />'; //printa array data atual
echo $m.' <br />'; //minutos passados.
echo $h.'<br />'; //horas atras.
echo $d.'<br />'; //dias atras
echo $n.'<br />'; //anoolha, consegui mas só com os dias, as horas ainda não.
<?php setlocale(LC_ALL, "pt_BR", "pt_BR.iso-8859-1", "pt_BR.utf-8", "portuguese"); date_default_timezone_set('America/Sao_Paulo'); $databd1 = '1992-07-18'; $databd2 = date('Y-m-d'); $data1 = explode('-', $databd1); $data2 = explode('-', $databd2); $ano = $data2[0] - $data1[0]; $mes = $data2[1] - $data1[1]; $dia = $data2[2] - $data1[2]; if ($mes < 0) { $ano--; $mes = 12 + $mes; } if ($dia < 0) { $mes--; $dia = 30 + $dia; } if ($ano > 0) { $str_ano = $ano . ' ano'; } if ($ano > 1) { $str_ano .= 's '; } if ($mes > 0) { $str_mes .= $mes . ' mes'; } if ($mes > 1) { if ($ano > 0) { $str_ano .= ' e '; } $str_mes .= 'es'; } if ($dia > 0) { $str_dia = $dia . ' dia'; } if ($dia > 1) { if ($mes > 0) { $str_mes .= ' e '; } $str_dia .= 's'; } echo 'postado: ', @$str_ano, @$str_mes, @$str_dia, ' atrás';você ja tme as data subtraida ue e so printa as variaveis no Post
c v cque elimina os resultado q for igual ou menor q 0 tenta assim;
acho q assim da certo =X
if($n <= 0){$na = '';}else{$na= $n;}//0 mostra nd
if ($d <= 0){$da = $h;}else{$da = $d;}//0 mostra Hora
if ($h == 00){$ha = '';}else{$ha = $h;}//00 mostra dia
echo "Postado a: $na $da $ha e $m;"; //os minutos ele sempre vai retorna
Use a classe DateTime
<?php
$date_time = new DateTime( '2011-07-20 19:36:52' );
$diff = $date_time->diff( new DateTime( '1984-03-06 19:46:12' ) );
echo $diff->format( '%y year(s), %m month(s), %d day(s), %H hour(s), %i minute(s) and %s second(s)' );
// 27 year(s), 4 month(s), 13 day(s), 23 hour(s), 50 minute(s) and 40 second(s)
?>
agora adaptei para fazer o mesmo com o tempo (hora, minuto, segundo)..
olhem só, ficou muito legal, espero que possa ajudar alguem...
<?php setlocale(LC_ALL, "pt_BR", "pt_BR.iso-8859-1", "pt_BR.utf-8", "portuguese"); date_default_timezone_set('America/Sao_Paulo'); $databd1 = '2009-08-06-00-10-10'; $databd2 = date('Y-m-d-H-i-s'); $data1 = explode('-', $databd1); $data2 = explode('-', $databd2); $ano = $data2[0] - $data1[0]; $mes = $data2[1] - $data1[1]; $dia = $data2[2] - $data1[2]; $hora = $data2[3] - $data1[3]; $min = $data2[4] - $data1[4]; $seg = $data2[5] - $data1[5]; // configuração data if ($mes < 0) { $ano--; $mes = 12 + $mes; } if ($dia < 0) { $mes--; $dia = 30 + $dia; } if ($ano > 0) { $str_ano = $ano . ' ano'; } if ($ano > 1) { $str_ano .= 's '; } if ($mes > 0) { @$str_mes .= $mes . ' mes'; } if ($mes > 1) { if ($ano > 0) { $str_ano .= ', '; } $str_mes .= 'es'; } if ($dia > 0) { $str_dia = $dia . ' dia'; } if ($dia > 1) { if ($mes > 0) { $str_mes .= ', '; } $str_dia .= 's'; } // configuração hora if ($min < 0) { $hora--; $min = 60 + $min; } if ($seg < 0) { $min--; $seg = 60 + $seg; } if ($hora > 0) { $str_hora = $hora . ' hora'; } if ($hora > 1) { @$str_hora .= 's'; } if ($min > 0) { @$str_min .= $min . ' minuto'; } if ($min > 1) { if ($hora > 0) { @$str_hora .= ', '; } @$str_min .= 's'; } if ($seg > 0) { $str_seg = $seg . ' seg'; } if ($seg > 1) { if ($min > 0) { $str_min .= ' e '; } $str_seg .= 's'; } echo @$str_ano, @$str_mes, @$str_dia,', ', @$str_hora, @$str_min, @$str_seg, ' atrás';
é só você calcular a diferença do horario q foi cadastrado com o horario atual.
hora_cadastrado -> 14:30
hora_atual -> 15:00
verifica se a hora atual é igual a hora cadastrada.
se for entao subtrai os minutos
senao subtrai as horas e depois os minutos
tempo_passado -> (hora_cadastrado - hora_atual )
Obs: voce devera tratar essa variavel, considerando os segundos, minutos e horas.