Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> обратный отсчет, счетчик 
:(
    Опции темы
StachelDraht
Дата 28.9.2010, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Не Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 19.1.2006

Репутация: нет
Всего: 1



Добрый день!

У меня встала задача написать обратный счетчик на javascript который будет отсчитывать время. Если быть точнее, то таких счетчиков может быть до 9.
Нашел более менее подходящий вариант:
Код

  <script type="text/javascript">
    function countdown_clock(id, year, month, day, hour, minute, format) {
       html_code  = '<div id="countdown' + id + '"></div><br>';
       html_code += '<div id="countdown' + id + '"></div>';
       document.write(html_code);
       countdown(id, year, month, day, hour, minute, format);                
    }
    function countdown(id, year, month, day, hour, minute, format) {
       Today = new Date();
       Todays_Year = Today.getFullYear() - 2000;
       Todays_Month = Today.getMonth();                  
       Todays_Date = (new Date(Todays_Year, Todays_Month, Today.getDate(), 
                               Today.getHours(), Today.getMinutes(), Today.getSeconds())).getTime();  
                               
       //alert(Todays_Date);                        
                              
                                                              
       Target_Date = (new Date(year, month - 1, day, hour, minute, 00)).getTime();                  
       Time_Left = Math.round((Target_Date - Todays_Date) / 1000);
       
       if(Time_Left < 0)
          Time_Left = 0;

       switch(format) {
         case 0:
              document.all.countdown.innerHTML = Time_Left + ' seconds';
              break;
         case 1:
              days = Math.floor(Time_Left / (60 * 60 * 24));
              Time_Left %= (60 * 60 * 24);
              hours = Math.floor(Time_Left / (60 * 60));
              Time_Left %= (60 * 60);
              minutes = Math.floor(Time_Left / 60);
              Time_Left %= 60;
              seconds = Time_Left;
              dps = 's'; hps = 's'; mps = 's'; sps = 's';
              if(days == 1) dps ='';
              if(hours == 1) hps ='';
              if(minutes == 1) mps ='';
              if(seconds == 1) sps ='';
              elem = document.getElementById("countdown" + id);
              elem.innerHTML = days + ' day' + dps + ' ';
              elem.innerHTML += hours + ' hour' + hps + ' ';
              elem.innerHTML += minutes + ' minute' + mps + ' and ';
              elem.innerHTML += seconds + ' second' + sps;
              break;
         default: 
              elem.innerHTML = Time_Left + ' seconds';
       }
       setTimeout('countdown(' + id + ',' + year + ',' + month + ',' + day + ',' + hour + ',' + minute + ',' + format + ');', 1000);
    }
    </script>

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

Спасибо!
PM MAIL   Вверх
bars80080
Дата 28.9.2010, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



надо дописать что-то вроде:

Код

  <script type="text/javascript">
  var basetime = <?php echo time(); ?>000;
  var bt = new Date();
  var diff = bt.getTime() - basetime;

    function countdown_clock(id, year, month, day, hour, minute, format) {
       html_code  = '<div id="countdown' + id + '"></div><br>';
       html_code += '<div id="countdown' + id + '"></div>';
       document.write(html_code);
       countdown(id, year, month, day, hour, minute, format);                
    }
    function countdown(id, year, month, day, hour, minute, format) {
       Today = new Date();
       Today.setTime(Today.getTime() - diff);
       ...

PM MAIL WWW   Вверх
StachelDraht
Дата 28.9.2010, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Не Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 19.1.2006

Репутация: нет
Всего: 1



bars80080, спасибо!
Время берет действительно серверное. Но при изменении время и даты на локальной машине время на счетчике все равно меняется, как с этим быть.

Спасибо!
PM MAIL   Вверх
bars80080
Дата 28.9.2010, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



Цитата(StachelDraht @  28.9.2010,  22:35 Найти цитируемый пост)
Но при изменении время и даты на локальной машине время на счетчике все равно меняется

во время отработки скрипта?

с этим ничего поделать нельзя, пока мы опираемся текущей временной точкой на время. 

       Today = new Date(); - чёткое указание взять локальное время

если мы хотим не зависимые от локали таймеры, то самый простой способ: задавать их через setTimeout(), наращивать переменную и прибавлять её каждый раз. что-то вроде:

Код

  <script type="text/javascript">
  var basetime = <?php echo time(); ?>000;
  var counter = 0;
    function countdown_clock(id, year, month, day, hour, minute, format) {
       html_code  = '<div id="countdown' + id + '"></div><br>';
       html_code += '<div id="countdown' + id + '"></div>';
       document.write(html_code);
       countdown(id, year, month, day, hour, minute, format);                
    }
    function countdown(id, year, month, day, hour, minute, format) {
       Today = new Date();
       counter += 1000;
       Today.setTime(basetime + counter);
       ...

но это не даст точного времени. в зависимости от работы скрипта будут сказываться его задержки
PM MAIL WWW   Вверх
StachelDraht
Дата 29.9.2010, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Не Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 19.1.2006

Репутация: нет
Всего: 1



да действительно, задержки есть и  большие.
есть какие то другие варианты этой задачи?

Спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0467 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.