Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Annyh

[Resolvido] função para informar quanto tempo se passou após post

Recommended Posts

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

é 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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 />';

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nao entendi..más não está calculando da forma correta é isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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...

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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';

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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);
//resgatando os arrays
$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 />'; //ano

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha, 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';

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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)
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

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';

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.