Таймер обратного отсчета на JavaScript

Таймер обратного отсчета является довольно простой и классической задачей для javascript.

Рассмотрим создание счетчика дней до определенной даты и такой же счетчик, но более олдскульный с отсчетом часов, минут и секунд.

<script language="JavaScript" type="text/javascript">
function count() {
 
month = 'Jan';      // Месяц даты наступления события
date = '01';        // Число даты наступления события
year = '2006';      // Год даты наступления события
 
theDate = month + ' ' + date + ' ' + year;
 
  now = new Date();
  setdate = new Date(theDate);
 
  timer = (setdate - now) / 1000 / 60 / 60 / 24;
  timer = Math.round(timer);
 
var message = timer + " дней до вашей даты!";                 // Текст сообщения на ваш вкус
if (timer == "1") message = timer + " сообытие через день";   // До события один день
if (timer == "0") message = "событие менее чем через день";   // До события менее одного дня
if (timer == "-1") message = "событие наступило";             // Событие наступило
if (timer < "-1") message = "";                               // Строка нулевой длины после наступления события
 
document.write(message);
}
count();
</script>

Вариант с днями, часами, минутами и секундами (на примере отсчета времени до наступления Нового года):

<script type="text/javascript">
function newYearIn()
{
    var days=" дней "
    var now = new Date();
    var newYear = new Date("Jan,01,2010,00:00:00");
    var totalRemains = (newYear.getTime()-now.getTime());
    if (totalRemains>1)
    {
        var RemainsSec=(parseInt(totalRemains/1000));
          var RemainsFullDays=(parseInt(RemainsSec/(24*60*60)));
        if (
            RemainsFullDays==2 ||
            RemainsFullDays==3 ||
            RemainsFullDays==4 ||
            RemainsFullDays==22 ||
            RemainsFullDays==23 ||
            RemainsFullDays==24 ||
            RemainsFullDays==32 ||
            RemainsFullDays==33 ||
            RemainsFullDays==34
            ) {
            days=" дня "
        }
        if (
            RemainsFullDays==1 ||
            RemainsFullDays==21 ||
            RemainsFullDays==31 
            ) {
            days=" день "
        }
          var secInLastDay=RemainsSec-RemainsFullDays*24*3600;
          var RemainsFullHours=(parseInt(secInLastDay/3600));
          if (RemainsFullHours<10){RemainsFullHours="0"+RemainsFullHours};
          var secInLastHour=secInLastDay-RemainsFullHours*3600;
          var RemainsMinutes=(parseInt(secInLastHour/60));
          if (RemainsMinutes<10){RemainsMinutes="0"+RemainsMinutes};
          var lastSec=secInLastHour-RemainsMinutes*60;
          if (lastSec<10){lastSec="0"+lastSec};
        document.getElementById('newyear').innerHTML = "<font size=20>До Нового Года осталось: "+RemainsFullDays+days+RemainsFullHours+":"+RemainsMinutes+":"+lastSec+"</font>";
          setTimeout("newYearIn()",10);
    } 
      else {document.getElementById("newyear").innerHTML = "C НОВЫМ ГОДОМ !!!";}
}
newYearIn();
</script>

Вэлкам в комменты с вопросами и идеями.

Комментариев: 2

  • 11.20.09 Александр:

    А как запустить таймер один раз для перегрзки страницы?

  • 12.09.09 Кирилл:

    Для последнего примера можно добавить запуск метода window.location.reload(true) вместо вывода сообщения «С НОВЫМ ГОДОМ !!!». Еще пачка интересных примеров здесь: http://grizzlyweb.com/webmaster/javascripts/refresh.asp.

    Кстати, всех с наступающим :) .


Добавление комментария:

Вы можете использовать эти теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">