Contagem regressiva em Javascript

Tempos atrás, no decorrer do desenvolvimento de um sistema web, o cliente solicitou que houvesse um contador regressivo de quanto tempo faltava para que o sistema efetuasse determinada ação.

Depois de quebrar a cabeça cheguei até o script abaixo

function atualizaContador(YY,MM,DD,HH,MI,saida) {
var SS = 00; //Segundos
var hoje = new Date(); //Dia
var futuro = new Date(YY,MM-1,DD,HH,MI,SS); //Data limite do contador

var ss = parseInt((futuro - hoje) / 1000); //Determina a quantidade total de segundos que faltam
var mm = parseInt(ss / 60); //Determina a quantidade total de minutos que faltam
var hh = parseInt(mm / 60); //Determina a quantidade total de horas que faltam
var dd = parseInt(hh / 24); //Determina a quantidade total de dias que faltam

ss = ss - (mm * 60); //Determina a quantidade de segundos
mm = mm - (hh * 60); //Determina a quantidade de minutos
hh = hh - (dd * 24); //Determina a quantidade de horas

//O bloco abaixo descreve monta o que vai ser escrito na tela
var faltam = '';
faltam += (dd && dd > 1) ? dd+' dias, ' : (dd==1 ? '1 dia, ' : '');
faltam += (toString(hh).length) ? hh+':' : '';
faltam += (toString(mm).length) ? mm+':' : '';
faltam += ss;

if (dd+hh+mm+ss > 0) {
document.getElementById(saida).innerHTML = faltam;//INsere o conteudo da variável faltam na página.
setTimeout(function(){atualizaContador(YY,MM,DD,HH,MI,saida)},1000);//Reinicia a função a cada um segundo
} else {
document.getElementById(saida).innerHTML = '';
setTimeout(function(){atualizaContador(YY,MM,DD,HH,MI,saida)},1000);
}
}

Agora para chamar na sua página, pode-se chamar de duas maneiras:

<body onload="atualizaContador('2009','07','14','23','00','00','elementodedestino')">

OU

<script type="text/javascript">window.onload=function(){
atualizaContador('2009','07','14','23','00','00','elementodedestino');
}</script>

Eu prefiro utiliza a maneira acima utilizando o window.onload, pois acredito que torna a página mais arrumada e, ainda, podemos colocar no final da página, melhorando o carregamento da página.

Espero que seja util para vocês.

link

Download

  1. Trabalhando com querystring e Javascript
  2. Desabilitar o Enter em um form com Javascript
  3. Javascript para principiantes ou esquecidinhos. Aula 3 – Loop
  4. Javascript para principiantes ou esquecidinhos. Aula 6 – Manipulando o DOM
  5. Função Trim em Javascript



11 Comentários »

  1. Comentário por Gustavo — 03/11/2009 @ 9:57 am

    Gárcia, muito bom o seu código, estou conseguindo utilizar perfeitamente, só um porém, queria que quando os segundos, minutos e horas fosse menor que 10, ele continuasse com duas casas decimais, ex: 09 e não 9. Teria como? Abraço.

  2. Comentário por Mauricio Miyakawa — 15/07/2011 @ 4:18 pm

    Olá Gustavo, troque a parte do código por essa:

    var faltam = ”;
    faltam += (dd && dd > 1) ? dd+’ dias, ‘ : (dd==1 ? ’1 dia, ‘ : ”);
    faltam += (toString(hh).length) ? (hh<10 ? '0'+hh+':' : hh+':') : '';
    faltam += (toString(mm).length) ? (mm<10 ? '0'+mm+':' : mm+':') : '';
    faltam += (ss<10 ? '0'+ss : ss);

  3. Comentário por Hamilton — 17/08/2011 @ 11:28 am

    Olá, preciso colocar varios contadores na mesma pagina, deu certinho o primeiro, mas quando coloco os outros, os primeiros travam e so funciona o ultimo. Vc poderia me dar umadica de quais variaveis eu preciso trocar o nome para que funcione varios scripts ao mesmo tempo? obrigado.

  4. Comentário por Cadu — 13/09/2011 @ 4:22 am

    Valeu cara… Obrigadão, era isso que eu estava precisando… abraços.

  5. Comentário por Guilherme — 21/09/2011 @ 9:54 am

    Parabéns! Muito bom o código.

  6. Comentário por River Cruz — 08/10/2011 @ 1:29 pm

    Muito bom o código vc esta de Parabéns!
    Mais gostaria de saber se tem como fazer um aparecer uma mensagem depois que acaba o tempo igual ao website do legendarei os

  7. Comentário por leandro garcia — 11/10/2011 @ 1:06 pm

    É possível, ams não nesta versão do código. Teria que ser alterado o código.

  8. Comentário por Diego — 19/12/2011 @ 10:43 pm

    Como faça para exibir apenas a hoa:minuos:segundos?

  9. Comentário por Fábio — 26/12/2011 @ 11:15 am

    Valeu Leandro, obrigado por disponibilizar o código.

  10. Comentário por leandro garcia — 02/01/2012 @ 3:34 pm

    Você tem que alterar o código de:

    var faltam = ”;
    faltam += (dd && dd > 1) ? dd+’ dias, ‘ : (dd==1 ? ’1 dia, ‘ : ”);
    faltam += (toString(hh).length) ? hh+’:’ : ”;
    faltam += (toString(mm).length) ? mm+’:’ : ”;
    faltam += ss;

    Para:
    var faltam = ”;
    faltam += (toString(hh).length) ? hh+’:’ : ”;
    faltam += (toString(mm).length) ? mm+’:’ : ”;
    faltam += ss;

  11. Comentário por arlindo vieira — 03/01/2012 @ 7:03 pm

    Cara Leandro muito obrigado!!!!!!! resolveu o meu problema estou procurando esse código desde a semana passada!

Rss dos comentários TrackBack URL

Deixe um comentário