Ir para conteúdo

POWERED BY:

Arquivado

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

Cyberoma

Calcula diferença entre datas

Recommended Posts

ELE FUNCIONA MAS NÃO SEI SE ESSA É A MELHOR FORMA, SE PODE OCORRER FALHAS..

 

O que eu quero: Mostre somente minutos, caso passe 59 minutos, mostre somente as horas, caso passe 24 horas, mostre somente dias.

 

<?php

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

$date2 = "2012-04-13 17:31:00";  

$diff = abs(strtotime($date2) - strtotime($date1)); 

$years   = floor($diff / (365*60*60*24)); 

$months  = floor(($diff - $years * 365*60*60*24) / (30*60*60*24)); 

$days    = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));

$hours   = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24)/ (60*60)); 

$minuts  = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60)/ 60); 


if($months == 1){

printf("%d mês", $months);
printf(" e %d dias", $days);

	}else if($months > 1){
		printf("%d meses", $months);
		printf(" e %d dias", $days);


}else if($days == 1){
printf("%d dia", $days);
	}else if($days > 1){
		printf("%d dias", $days);


}else if($hours == 1){
printf("%d hora", $hours);
	}else if($hours > 1){ 
		printf("%d horas", $hours);


}else if($minuts < 2){
printf("%d minuto", $minuts);
	}else{
		printf("%d minutos", $minuts);
}





?>

 

Alguem pode ajudar?

 

OBS: Topico ja estava na terceira pagina e sem resposta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

$inicio		= date("d/m/Y H:i:s");
$fim		= '25/06/2012 18:54:00';


$epoch_1 		= mktime(18,00,00,04,28,2012);
$epoch_2 		= mktime();
$s 	= $epoch_1 - $epoch_2;
$d 	= floor($s/86400);
$s 	-= $d * 86400;
$h 	= floor($s/3600);
$s 	-= $h * 3600;
$m 	= floor($s/60);
$s	-= $m * 60;
if($s<10){ $s = '0'.$s; }
if($m<10){ $m = '0'.$m; }
if($h<10){ $h = '0'.$h; }
if($d<10){ $d = '0'.$d; }
$time_left		=	 $d.':'.$h.':'.$m.':'.$s;

 

Tenho esse script... Dá pra implementar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal achei esse codigo, ele funciona..

 

Porem eu quero fazer alguns if, para mostrar somente os minutos, as horas e os dias.. Aki ele ta mostrando tudo de vez..

 

Mas nao sei onde vou colocar os if's

 

<?php


function datediff($start, $end="NOW")
{
       $sdate = strtotime($start);
       $edate = strtotime($end);

       $time = $edate - $sdate;



               // Days + Hours + Minutes
               $pday = ($edate - $sdate) / 86400;
               $preday = explode('.',$pday);

               $phour = $pday-$preday[0];
               $prehour = explode('.',$phour*24);

               $premin = ($phour*24)-$prehour[0];
               $min = explode('.',$premin*60);

               $presec = '0.'.$min[1];
               $sec = $presec*60;

               $timeshift = $preday[0].' days '.$prehour[0].' hrs '.$min[0].' min '.round($sec,0).' sec ';


       return $timeshift;
}

// EXAMPLE:

$start_date = "15-04-2012 19:50:00";
$end_date = date("15-04-2012 H:i:s");



echo datediff($start_date, $end_date);

?>

 

Alguem pode ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

No exemplo q te passei ta tudo separado olha:

 

$time_left              =        $d.':'.$h.':'.$m.':'.$s;

 

 

$d = dia

 

$h = hora

 

$m = minuto

 

$s = segundo

 

Cristian Obrigado pela ajuda, mas não entendi esse codigo:

$inicio         = date("d/m/Y H:i:s");
$fim            = '25/04/2012 18:54:00';


$epoch_1                = mktime(18,00,00,04,28,2012);
$epoch_2                = mktime();
$s      = $epoch_1 - $epoch_2;
$d      = floor($s/86400);
$s      -= $d * 86400;
$h      = floor($s/3600);
$s      -= $h * 3600;
$m      = floor($s/60);
$s      -= $m * 60;
if($s<10){ $s = '0'.$s; }
if($m<10){ $m = '0'.$m; }
if($h<10){ $h = '0'.$h; }
if($d<10){ $d = '0'.$d; }
$time_left              =        $d.':'.$h.':'.$m.':'.$s;


echo $time_left;

 

Ele ta imprimindo 12:08:26:48

 

E ele estár regredindo o tempo a diferença, quero que ele va aumentando. Voce me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi!

 

Voce quer acrescentar tempo ao valor passado ou diminuir? :S

 

Eu quero somente a diferença entre uma data(que vai vir do banco de dados) e a data atual. Então a diferença vai aumentar com o passar do tempo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

hum...

DateTime não ajuda naquela parte de calculos?

 

$hoje = new DateTime();
$evento = new DateTime('2012-07-01 17:34:00');

$diff = $hoje->diff($evento);

 

Leia a documentação para mais detalhes deste método ;)

 

@braços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hufersil, peguei o codigo do php 5.2 que é a minha versao.

 

<?php
function ago($dt)
{
   $dt = date_parse($dt);
   $now = date_parse(date("Y-m-d H:i:s"));

   $suffix = " ago";

   if ($now['year'] != $dt['year']) return $this->pluralize($now['year'] - $dt['year'], "year") . $suffix;
   if ($now['month'] != $dt['month']) return $this->pluralize($now['month'] - $dt['month'], "month") . $suffix;
   if ($now['day'] != $dt['day']) return $this->pluralize($now['day'] - $dt['day'], "day") . $suffix;
   if ($now['hour'] != $dt['hour']) return $this->pluralize($now['hour'] - $dt['hour'], "hour") . $suffix;
   if ($now['minute'] != $dt['minute']) return $this->pluralize($now['minute'] - $dt['minute'], "minute") . $suffix;
   if ($now['second'] != $dt['second']) return $this->pluralize($now['second'] - $dt['second'], "second") . $suffix;
       return "just now";
}

private function pluralize($count, $text) 
{ 
   return $count . (($count == 1) ? (" $text") : (" ${text}s"));
}

$date = ("16-04-2012 09:00:00");

echo ago($date);
?>

 

Porem estar dando um erro

 

Fatal error: Using $this when not in object context in C....

 

Nessa linha:

 

if ($now['hour'] != $dt['hour']) return $this->pluralize($now['hour'] - $dt['hour'], "hour") . $suffix;

 

O que eu fiz de errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

você está usando $this em uma função que não está dentro de uma classe.

 

$this é usado somente dentro de classes.

 

@braços

Compartilhar este post


Link para o post
Compartilhar em outros sites

você está usando $this em uma função que não está dentro de uma classe.

 

$this é usado somente dentro de classes.

 

@braços

 

Pronto deu certooo, tirei o $this->

 

Finalmenteeeee.. Obrigado hufersil

 

E a todos que tentaram me ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu quero somente a diferença entre uma data(que vai vir do banco de dados) e a data atual. Então a diferença vai aumentar com o passar do tempo.

 

Deixa ver se entendi: é pra saber quanto tempo passou desde a data do db (mais antiga) ate hoje, agora?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deixa ver se entendi: é pra saber quanto tempo passou desde a data do db (mais antiga) ate hoje, agora?

 

 

Isso aí..

 

xD

 

Pessoal aproveitando, o date ele pega data e horario da maquina certo?

 

mas quando eu hospedar meu site, quero ele pegue o horario do servidor da hospedagem.. Se não o povo muda o horario do PC e pronto..

 

Uso o que?

Compartilhar este post


Link para o post
Compartilhar em outros sites

...o date ele pega data e horario da maquina certo?

 

mas quando eu hospedar meu site, quero ele pegue o horario do servidor da hospedagem.. Se não o povo muda o horario do PC e pronto..

 

Uso o que?

 

utilize isto no inicio do seu codigo :

 

<?php date_default_timezone_set('America/Recife');

Substitua America/Recife pelo mais aproprado ao seu horario, uma lista dos valores possiveis pode ser encontrada aqui: TimeZones

 

Quanto a funcao ainda precisa de ajuda?

Compartilhar este post


Link para o post
Compartilhar em outros sites

utilize isto no inicio do seu codigo :

 

<?php date_default_timezone_set('America/Recife');

Substitua America/Recife pelo mais aproprado ao seu horario, uma lista dos valores possiveis pode ser encontrada aqui: TimeZones

 

Quanto a funcao ainda precisa de ajuda?

 

 

Não, a função funcionou perfeitamente..

 

Obrigado pela dica Interplanet.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eita... eu estava precisando para HOJE de um script que pudesse ser usado várias vezes ao mesmo tempo...

Usei o que o Cyberoma Passou, e adicionei:

if($min[0] < "1") {
       return round($sec,0)." Segundos atrás";
	}
	if($min[0] >= "1") {
       return $min[0]."Minutos atrás";
	}

Brigadão :D

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.