Как реализовать зацикленный обратный отсчет

Тема в разделе "JavaScript", создана пользователем arsen, 4 фев 2013.

Модераторы: ZiX
  1. arsen

    arsen НЕрядовой

    Регистр.:
    16 июн 2011
    Сообщения:
    856
    Симпатии:
    305
    Хочу сделать зацикленный обратный отсчет то есть
    до конца акции осталось 3 дня и таймер пошел-как только 0 -перепрыгивает снова на 3 дня
    пример http://bmshop5.ru/

    как сжелать вручную я знаю,интресует именно автоматический перевод
     
    evolvent нравится это.
  2. ВладимирТрой

    ВладимирТрой Постоялец

    Регистр.:
    29 янв 2013
    Сообщения:
    53
    Симпатии:
    19
    а кол-во дней до акции - это константа и постоянно одно и то же значение или разное(к примеру которое берется из БД)?
     
  3. recasher2k12

    recasher2k12

    Регистр.:
    19 фев 2012
    Сообщения:
    156
    Симпатии:
    78
    Ну вы даёте.
    PHP:
    var nextFinDays Math.floor((new Date()).getTime()/1000/60/60/24) % 3
    значение переменной nextFinDays после этой строки будет равно 0, 1 или 2.
    0 - акция закончится сегодня, 1 - завтра, 2 - послезавтра
    далее вам нужно создать дату (new Date()) на время 23:59:59.999 c прибавлением к дням этого числа.
    ну а дальше код самого счетчика уже...
    видите? сделан на чистом JS
     
    latteo нравится это.
  4. ВладимирТрой

    ВладимирТрой Постоялец

    Регистр.:
    29 янв 2013
    Сообщения:
    53
    Симпатии:
    19
    это если кол-во дней до конца акции всегда одно и то же и равно 3-м, что я и спрашивал в первом предложении
    но ведь реально на сайте я думаю не будет каждый раз одно и то же кол-во дней до конца акции? а может быть и 3 и 4 и т.д., т.е. по истечению акции которая длилась 3 дня может начаться акция которая будет 5 дней и т.д. и чтобы цикличность работала и в этом случае
    вот собственно в чем мой вопрос и заключался - в том чтобы понять какого типа должна быть цикличность
     
  5. arsen

    arsen НЕрядовой

    Регистр.:
    16 июн 2011
    Сообщения:
    856
    Симпатии:
    305
    в том то и дело - заказчику приспичило запилить 3 дня до акции по кругу - типа у него в магазе всегда акция
     
    evolvent нравится это.
  6. o_nix

    o_nix

    Регистр.:
    7 ноя 2007
    Сообщения:
    1.073
    Симпатии:
    1.037
    PHP:
    <Script Language="JavaScript">
    var 
    = new Date().getDay();
    if(
    d==0||d==3||d==6)day=3;
    if(
    d==1||d==4)day=2;
    if(
    d==2||d==5)day=1;
    alert('осталось дней: '+day);
    </Script>
     
  7. arsen

    arsen НЕрядовой

    Регистр.:
    16 июн 2011
    Сообщения:
    856
    Симпатии:
    305
    а можно еще прикрутить часы и минуты?
     
    evolvent нравится это.
  8. recasher2k12

    recasher2k12

    Регистр.:
    19 фев 2012
    Сообщения:
    156
    Симпатии:
    78
    Вы решили ту же самую задачу что и я. Только я решил одной строчкой, и по 3 дня отмеряется на всей временной линии, независимо от дня недели. Видать, автору заготовки не нужны, а нужен полный код.
    Как всегда, чистый JS
    PHP:
    // Получаем сколько дней до конца акции
    var nextFinDays Math.floor((new Date()).getTime()/1000/60/60/24) % 3
    var finDate = new Date()
    // Устанавливаем дату окончания акции
    finDate.setDate(finDate.getDate() + nextFinDays)
    // Устанавливаем время окончания акции (23:59:59)
    finDate.setHours(23)
    finDate.setMinutes(59)
    finDate.setSeconds(59)
    // Вычисляем разницу времени окончания акции к текущему времени.
    var diff finDate.getTime() - (new Date()).getTime()
    // Выводим результаты через alert()
    alert('Осталось '
    Math.floor(diff/=1000)%60 ' сек. '
    Math.floor(diff/=60)%60 ' мин. '
    Math.floor(diff/=60)%24 ' час. '
    Math.floor(diff/=24) + ' дней. '
    )
     
    latteo нравится это.