Отсчет времени до события (JavaScript)

Аватара пользователя
Котяра

Отсчет времени до события (JavaScript)

Сообщение Котяра »

Можно ли сделать отсчет отсчет времени до события (скажем, до 31.12.08 23:59 Изображение ) на JS?

И чтобы секунды обновлялись без перезагрузки страницы.
Аватара пользователя
Coutty

Re: Отсчет времени до события (JavaScript)

Сообщение Coutty »

Поподробнее, пожалуйста, что хочется получить.

Счётчик вроде "До армагеддона осталось 5 часов 17 минут и 56 секунд" или же чтобы через каждые десять секунд, предположим, открывался новый абзац текста?
Аватара пользователя
Котяра

Re: Отсчет времени до события (JavaScript)

Сообщение Котяра »

Цитата Coutty:



Счётчик вроде "До армагеддона осталось 5 часов 17 минут и 56 секунд"
Отсчет времени до события (JavaScript)




Именно это.
Аватара пользователя
Coutty

Re: Отсчет времени до события (JavaScript)

Сообщение Coutty »

Наверняка можно найти уже готовое, но мы не ищем лёгких путейИзображение



HTML код:

Код: Выделить всё

<html>
<head>
<title>Демонстрация</title>
<script>
// эти три переменные можно генерировать php-скриптом на основе каких-то данных
// или же прописать ручками, но тогда они при каждом запросе будут одни и те же
var hour = 5;
var min = 17;
var sec = 56;
var timer; // ссылка на таймер, который потом можно будет остановить
// это необязательно, просто мне нравится начинать все свои скрипты с main() :)
// вызов её прописывается в <body onload="main()">
function main() {
  timer = window.setInterval("showTime()", 1000); // каждые 1000 мс вызываем функцию showTime()
}
function showTime() {
  sec--; // каждый вызов функции приводит к уменьшению на 1 секунду
  if (sec < 0) // если секунды ушли в минус,
    {
    sec = 59; // возвращаем их в 59
    min--;      // и уменьшаем минуту
    if (min < 0)  // если минуты ушли в минус
      {
       min = 59;  // возвращаем их в 59
       hour--;   // и уменьшаем час на единицу
       if (hour < 0) // а уж если и час в минус ушёл
          {
          window.clearInterval(timer); // значит хватит считать, снимаем таймер, чтоб функция больше не вызывалась
          document.getElementById("showTime").innerHTML = "<span style='color:red'>Армагеддон наступил!</span>"; // и выводим красными буквами приветствие:)
          }
      }
    }
  // окончание вычисления такое:
  document.getElementById("showTime").innerHTML = "До армагеддона осталось " + hour + " часов " + min + " минут " + sec + " секунд";
}
</script>
<body onload="main()">
<div id="showTime">Сюда будет вписываться текст</div>
</body>
</html>



В общем-то, мне влом проверять (создать файл, записать, открыть...), но должно работать как надо.
Аватара пользователя
Котяра

Re: Отсчет времени до события (JavaScript)

Сообщение Котяра »

Coutty, мне надо. чтобы были и дни
Аватара пользователя
Coutty

Re: Отсчет времени до события (JavaScript)

Сообщение Coutty »

Только оно немного не по-русски будет писать иногдаИзображение Например: "1 часов 2 минут 52 секунд".

Можно и так сделать:



HTML код:

Код: Выделить всё

document.getElementById("showTime").innerHTML = "До армагеддона осталось времени: " + hour + ":" + min + ":" + sec + ":";



Тогда будет выводиться: "До армагеддона осталось времени: 5:17:56".



Проверил. Работает.



А что, до матча Россия-Испания засечь хочешь?)) Такая срочность...



Ну так и дни добавимИзображение





HTML код:

Код: Выделить всё

<html>
<head>
<title>Демонстрация</title>
<script>
// эти три переменные можно генерировать php-скриптом на основе каких-то данных
// или же прописать ручками, но тогда они при каждом запросе будут одни и те же
var days = 8;
var hour = 5;
var min = 17;
var sec = 56;
var timer; // ссылка на таймер, который потом можно будет остановить
// это необязательно, просто мне нравится начинать все свои скрипты с main() :)
// вызов её прописывается в <body onload="main()">
function main() {
  timer = window.setInterval("showTime()", 1000); // каждые 1000 мс вызываем функцию showTime()
}
function showTime() {
  sec--; // каждый вызов функции приводит к уменьшению на 1 секунду
  if (sec < 0) // если секунды ушли в минус,
    {
    sec = 59; // возвращаем их в 59
    min--;      // и уменьшаем минуту
    if (min < 0)  // если минуты ушли в минус
      {
       min = 59;  // возвращаем их в 59
       hour--;   // и уменьшаем час на единицу
       if (hour < 0) // а уж если и час в минус ушёл
          {
          hour = 23;
          days--;
          if (days < 0)
            {
            window.clearInterval(timer); // значит хватит считать, снимаем таймер, чтоб функция больше не вызывалась
            document.getElementById("showTime").innerHTML = "<span style='color:red'>Армагеддон наступил!</span>"; // и выводим красными буквами приветствие:)
            }
          }
      }
    }
  // окончание вычисления такое:
  document.getElementById("showTime").innerHTML = "До армагеддона осталось времени: " + days + " дней " + hour + " часов " + min + " минут " + sec + " секунд";
}
</script>
<body onload="main()">
<div id="showTime">Сюда будет вписываться текст</div>
</body>
</html>



Если надо, чтобы ещё и наименования к цифрам по-русски склонялись, то код немного усложниться. Но если такой необходимости нет, то я зря не буду ужИзображение



Так, вопрос обновился в шапке. Сейчас поменяем ещё разИзображение
Аватара пользователя
Котяра

Re: Отсчет времени до события (JavaScript)

Сообщение Котяра »

Цитата Coutty:



// эти три переменные можно генерировать php-скриптом на основе каких-то данных // или же прописать ручками, но тогда они при каждом запросе будут одни и те же
Отсчет времени до события (JavaScript)




Вот в этом проблема! Событие до которого нужно считать, имеет конкретную дату и конкретное время (см. пример с новым годом в шапке). PHP нет возможности сделать!




Цитата Coutty:



А что, до матча Россия-Испания засечь хочешь?)) Такая срочность...
Отсчет времени до события (JavaScript)




До финала Изображение
Аватара пользователя
Котяра

Re: Отсчет времени до события (JavaScript)

Сообщение Котяра »

Так можно ли реализовать с помощью JavaScript аналог скрипта Coutty, только чтобы считалось время до даты. Если JavaScript не может открывать системные часы, то надо, чтобы под таймером была строка

ВВЕДИТЕ ВРЕМЯ И ДАТУ:

[].[].[] []:[] [вкл. таймер]

и спрашивалось это у пользователей.
Аватара пользователя
Coutty

Re: Отсчет времени до события (JavaScript)

Сообщение Coutty »

HTML код:

Код: Выделить всё

<html>
<head>
<title>Демонстрация посложнее</title>
<script>
var final = {'year':2008, 'month':12, 'day':31, 'hour':23, 'min':59, 'sec':59}; // это дата и время, до которых надо считать
var months = [31,28,31,30,31,30,31,31,30,31,30,31]; // количество дней в месяцах. В феврале поставил 28. Пусть будет:)
var d = new Date();
var year = final.year - d.getFullYear(); // вычисляем, сколько надо лет отсчитывать
var month = final.month - d.getMonth() - 1;
if (year && final.month < d.getMonth()) month += 12; // если количество оставшихся лет больше нуля, увеличиваем месяцы на 12. Ну по логике так надо сделать
var days = final.day - d.getDate() - 1;
if (month && final.day < d.getDate()) 
  {
  days += months[month-1]; // если месяцев больше 0, то количество дней увеличивается на количество дней в предыдущем месяце
  month--;
  }
var hour = final.hour - d.getHours();
var min = final.min - d.getMinutes();
var sec = final.sec - d.getSeconds();
var timer; // ссылка на таймер, который потом можно будет остановить
// это необязательно, просто мне нравится начинать все свои скрипты с main() :)
// вызов её прописывается в <body onload="main()">
function main() {
  timer = window.setInterval("showTime()", 1000); // каждые 1000 мс вызываем функцию showTime()
}
function showTime() {
  sec--; // каждый вызов функции приводит к уменьшению на 1 секунду
  if (sec < 0) // если секунды ушли в минус,
    {
    sec = 59; // возвращаем их в 59
    min--;      // и уменьшаем минуту
    if (min < 0)  // если минуты ушли в минус
      {
       min = 59;  // возвращаем их в 59
       hour--;   // и уменьшаем час на единицу
       if (hour < 0) // а уж если и час в минус ушёл
          {
          hour = 23;
          day--;
          if (day < 0)
            {
            day = months[month-1];
            month--;
            if (month < 0)
              {
              month = 12;
              year--;
              if (year < 0)
                {
                window.clearInterval(timer); // значит хватит считать, снимаем таймер, чтоб функция больше не вызывалась
                document.getElementById("showTime").innerHTML = "<span style='color:red'>Армагеддон наступил!</span>"; // и выводим красными буквами приветствие:)
                }
              }
            }
          }
      }
    }
  // окончание вычисления такое:
  text = "До армагеддона осталось ";
  switch(year) {
    case 0:
      text += "0 лет "; break;
    case 1:
      text += "1 год "; break;
    case 2: case 3: case 4:
      text += year + " года "; break;
    default:
      text += year + " лет "; break;
  } 
  switch(month) {
    case 0: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12:
      text += month + " месяцев "; break;
    case 1:
      text += month + " месяц "; break;
    case 2: case 3: case 4: 
      text += month + " месяца "; break;
  }
  switch(days) {
    case 1: case 21: case 31:
      text += days + " день "; break;
    case 2: case 3: case 4: case 22: case 23: case 24:
      text += days + " дня "; break;
    default:
      text += days + " дней "; break;
  }
  text += " и вот столько ещё времени: " + hour + ":";
  if (min.toString().length == 1) text += "0";
  text += min + ":";
  if (sec.toString().length == 1) text += "0";
  text += sec;
  document.getElementById("showTime").innerHTML = text;
}
</script>
<body onload="main(); showTime();">
<div id="showTime">Сюда будет вписываться текст</div>
</body>
</html>



Я не гарантирую полную правильность работы - может быть дни или месяцы или ещё чего будет считать неправильно, но... Уже за полночь, а мне спать осталось меньше 8 часов-няИзображение

На первый взгляд всё работает. Скрипт-то, в общем, не сложный.
Ответить

Вернуться в «Вебмастеру»