Ir para conteúdo

POWERED BY:

Arquivado

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

Renan Decarlo

Desafio CountDown em PHP!

Recommended Posts

Oi, esses dias eu estive procurando um countdown em javascript por que não estava conseguindo fazer em php, já que ele demorava mais do que 1 segundo normal para ir para o número de baixo. Então, depois de 2 dias procurando, achei uma forma de fazer em php. Então, aqui está o desafio:

- Criar um CountDown que vai de 30 até 1, seguindo o tempo certo dos segundos (sem segundos demorados ou mais rápidos em! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif).

 

Só quero dar algumas dicas:

 

se você usar...

<meta HTTP-EQUIV="Refresh" CONTENT="1; URL="> // isso não funciona, os segundos ficam mais lerdos

sleep(1); // isso também não http://forum.imasters.com.br/public/style_emoticons/default/blush.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

php é uma linguagem interpretada por request... ou seja, você não vai conseguir fazer um countdown desse tipo por ele.

você pode até conseguir, usando refresh na página e controlando por sessões mas... não vai ficar bom.

 

Não fica bom porque:

1 - AdSense... não pode ter refresh automatico na pagina

2 - Mais requests no servidor... que dependendo do nivel do site seria um desastre

3 - javascript existe pra isso... basta saber utilizar bem pra impedir de fazer qualquer coisa durante a contagem

Compartilhar este post


Link para o post
Compartilhar em outros sites

taí pra vcs brincarem rss

 

<?php

// Current Date
$year	= date('Y');
$month   = date('m');
$day	 = date('d');
$hour	= date('H');
$minute  = date('i');
$second  = date('s');
$date	= array($hour,$minute,$second,$month,$day,$year);

// Birth Date
$year	= '1981';
$month   = '08';
$day	 = '10';
$hour	= '21';
$minute  = '30';
$second  = '00';
$date2   = array($hour,$minute,$second,$month,$day,$year);


// this function return days of month on specified year
function meses($ano) {
	$leap = date("L", mktime (0, 0, 0, 1, 1, $ano));
	// check for leap year
	$val  = ( $leap == 1 ) ? 29 : 28; // february days
	$rs   = array( false, 31, $val, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 );
	return $rs;
}

//Defining class bt keyword class
class DateBirthCount {

	function DateBirthCountPassed(){
		global $date, $date2, $return;
		list ($hour, $minute, $second, $month, $day, $year)= $date;
		list ($hour2, $minute2, $second2, $month2, $day2, $year2)= $date2;

		$todayDate = mktime($hour, $minute, $second, $month, $day, $year);
		$BirtDate  = mktime($hour2, $minute2, $second2, $month2, $day2, $year2);
		$diff	  = $todayDate - $BirtDate;
		if($diff < 0){
		$diff = 0;
		}

		// total years
		$yearDiff = $year - $year2;
		if( $month < $month2 ){
			$yearDiff--;
		}
		$yl = $yearDiff;

		// get months
		$ml  = $month - $month2;
		if( $month2 > $month ){
			$ml  = ( 12 - $month2 ) + $month;
			if( $ml > 0 && ( $day < $day2 ) ){
			$ml--;
			}
		}

		// get days
		$dl  = $day - $day2;
		if( $day < $day2 ){
			$mm = meses( $year );
			$dl = ( $mm[intval($month)] - $day2 ) + $day;
		}

		// get hours, minutes and seconds
		$dlA = floor($diff/60/60/24);
		$hl  = floor(($diff - $dlA*60*60*24)/60/60);
		$il  = floor(($diff - $dlA*60*60*24 - $hl*60*60)/60);
		$sl  = floor(($diff - $dlA*60*60*24 - $hl*60*60 - $il*60));

		// OUTPUT
		$return = array( $yl, $ml, $dl, $hl, $il, $sl);
		return ($return);
	}
}
//Making New Object for the class DateBirthCount
$date_obj = new DateBirthCount($date);
//Function (Method) call by an object to function DateBirthCountPassed
$date_obj -> DateBirthCountPassed();

//Making varialbes from $return array
list($yl,$ml,$dl,$hl,$il,$sl) = $return;

//Browser Output
list ($hour, $minute, $second, $month, $day, $year)= $date;
echo "Today's Date ";
	echo " " . $year;
	echo "-" . $month;
	echo "-" . $day;
	echo " " . $hour;
	echo ":" . $minute;
	echo ":" . $second;
	echo "<br/>";
echo "Birth Day Date ";
list ($hour, $minute, $second, $month, $day, $year)= $date2;
	echo " " . $year;
	echo "-" . $month;
	echo "-" . $day;
	echo " " . $hour;
	echo ":" . $minute;
	echo ":" . $second;
	echo "<br/>";

echo "Time ";
	echo $yl . " years, ";
	echo $ml . " months, ";
	echo $dl . " days, ";
	echo $hl . " hours, ";
	echo $il . " minutes and ";
	echo $sl . " seconds";


?>

fiz para data de nascimento, mas pode ser utilizado para countdown também. basta especificar a data inicial e data final

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um countdown em php seria pelo menos não-confiável...

 

É simples..., o php executa em um servidor, e o retorno da contagem seria feito no cliente..., entre esses dois carinhas (servidor e cliente) existe uma rede, que na maioria das vezes é a WEB, portanto o tempo de resposta seria totalmente dependente do tráfego da rede no momento de cada requisição. Pra mim.., é impossível.., só com mágica. Ou de um jeito mais fácil.., com javascript.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um countdown em php seria pelo menos não-confiável...

É simples..., o php executa em um servidor, e o retorno da contagem seria feito no cliente..., entre esses dois carinhas (servidor e cliente) existe uma rede, que na maioria das vezes é a WEB, portanto o tempo de resposta seria totalmente dependente do tráfego da rede no momento de cada requisição. Pra mim.., é impossível.., só com mágica. Ou de um jeito mais fácil.., com javascript.

discordo.

 

javascript é client-side.

se o pc do usuario estiver com data errada, o resultado será errôneo

 

depende de como montar a lógica de funcionamento

 

se quiser exibir um relógio que mostre a data em regressão on-the-fly, terá que utilizar algum script client-side como javascript, ou actionScript do Flash

 

para que o cálculo seja feito de forma correta, é preciso obter a data num único local seguro e enviar ao navegador.

 

 

usando javascript ou actionscript, basta informar parâmetros de inicialização no objeto Date()

Compartilhar este post


Link para o post
Compartilhar em outros sites

Simplesmente não dá pra fazer isso com PHP. Mas com JavaScript ou qualquer outra linguagem client-side, como ActionScript ou um applet Java pode ser feito tranquilamente.

 

Ainda que se use AJAX, vai se como o Jeff Rex disse, vai ter distorções por conta do tráfego. Ainda: se você usar AJAX vai estar usando JavaScript do mesmo jeito, então seria bem mais fácil e barato usar a função setTimeout logo do que XMLHttpRequest para requisitar o proximo menor número de um script PHP. Isso sem falar nas grandiosas possibilidades de erro...

Compartilhar este post


Link para o post
Compartilhar em outros sites

para requisitar o proximo menor número de um script PHP.

nao precisa fazer os cálculos seguintes com php

 

apenas o primeiro

Compartilhar este post


Link para o post
Compartilhar em outros sites

Simplesmente não dá pra fazer isso com PHP. Mas com JavaScript ou qualquer outra linguagem client-side, como ActionScript ou um applet Java pode ser feito tranquilamente.

Applet java?Inviavel cara...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu fiz esse agorinha pro meu sistema, precisa de Jquery

/*
	Contador regressivo
*/
	function contador(segundos,pagina){
		contador1 = setTimeout('redireciona(\''+pagina+'\')', segundos*1000);
		atualiza(segundos);
	}
	function atualiza(segundos){
		if(segundos>0){
			$("#tempo").html(segundos);
			segundos = segundos-1;
			contador2 = setTimeout('atualiza(\''+segundos+'\')', 1000);
		}
	}
	function redireciona(pagina){
		window.location = pagina;
	}
/*
		Crie algum objeto com id tempo
	Uso:
	contador(<segundos>,<pagina_para_redirecionar>);
	Exemplo:
	contador(5,'index.php');
*/

Exemplo:

<script type="text/javascript">
	  contador(5,'download.php');
</script>
<span id="tempo"></span>

Pode pedir qualquer adaptação que eu faço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu fiz esse agorinha pro meu sistema, precisa de Jquery

/*
	Contador regressivo
*/
	function contador(segundos,pagina){
		contador1 = setTimeout('redireciona(\''+pagina+'\')', segundos*1000);
		atualiza(segundos);
	}
	function atualiza(segundos){
		if(segundos>0){
			$("#tempo").html(segundos);
			segundos = segundos-1;
			contador2 = setTimeout('atualiza(\''+segundos+'\')', 1000);
		}
	}
	function redireciona(pagina){
		window.location = pagina;
	}
/*
		Crie algum objeto com id tempo
	Uso:
	contador(<segundos>,<pagina_para_redirecionar>);
	Exemplo:
	contador(5,'index.php');
*/

Exemplo:

<script type="text/javascript">
	  contador(5,'download.php');
</script>
<span id="tempo"></span>

Pode pedir qualquer adaptação que eu faço.

ótimo código , porém teria que ser feito somente em php ,tenta com php-gtk é facinho.

Compartilhar este post


Link para o post
Compartilhar em outros sites

javascript é client-side.

se o pc do usuario estiver com data errada, o resultado será errôneo

 

Pessoal, mil desculpas por desenterrar esse tpc, mas procurei o dia todo por um script como esse q tentaram desenvolver aqui pra usar no meu site e estou com problema exatamente no que o amigo aí de cima disse, ou seja, o contador do meu site em hipótese alguma pode ter interferência do usuário. Preciso que esse contador seja em PHP ou que, de algum jeito, sendo em js, a mudança de hora no cliente não afete o contador.

 

O meu contador funciona da seguinte maneira: Tenho uma data que será resgatada do BD e o contador precisará atualizar de segundo em segundo, mostrando isso ao usuário, diminuindo a data atual da data que veio do BD até chegar a 0 dia, 0 hora, 0 min, 0 segundos. Quando isso acontecer, algo acontecerá e esse "algo" não pode ser adiantado porque o usuário mexeu no relógio do seu PC, entendem?

Alguém pode ajudar?

Muito obrigado!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

ttkhila, o post 12 do Thiago não serviria para o seu caso ?

 

Opa, td beleza?

O script do Thiago é javascript tb... se o usuário alterar o relógio do computador, altera o resultado tb... eu tenho um desse tipo aqui, completo, com dias, horas, minutos e segundos, mas tem esse probleminha. Vou continuar aguardando pra ver se aparece algum.

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

o post do thiago é apenas um exemplo utilizando jquery

 

por meio de requisições constantes a uma página php, o valor é retornado do servidor, independentemente de estar sendo chamado em javascript

Compartilhar este post


Link para o post
Compartilhar em outros sites

o post do thiago é apenas um exemplo utilizando jquery

 

por meio de requisições constantes a uma página php, o valor é retornado do servidor, independentemente de estar sendo chamado em javascript

 

ok, vou tentar. Muito obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Código do arquivo"index.php":

<html>
<head>
  <script type="text/javascript" src="http-~~-//ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
  <script type="text/javascript"> 
  $(document).ready(function() {   
    $.post("time.php",{}, function(data){     
      var retorno = data;

      if (retorno){
        $("#time").val(retorno);
        $("#timer").html(retorno);
      } else {
        $("#timer").html("Erro");
      }
    });
  });

  function conta() {
    time = $("#time").val() - 1;
    $("#time").val(time);
    $("#timer").html(time);
    setTimeout("conta()", 1000);
  }
  </script>
</head>
<body>
  <input id="time" type="hidden" />
  <div id="timer"></div>
  <script type="text/javascript">conta()</script>
</body>
</html>

 

Código do arquivo "time.php":

<?=date("hms")?>

 

OBS:

- Perdoem-me se a resposta foi muito amadora, a intenção foi ajudar.

- Não fiz questão de formatar a hora.

 

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