Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/26: Рейтинг темы: голосов - 26, средняя оценка - 4.96
0 / 0 / 0
Регистрация: 13.06.2014
Сообщений: 51
1

Скрипт таймера обратного отсчета, как сделать повторение через каждые 48 часов?

23.09.2014, 00:13. Показов 5389. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
есть скрипт таймера обратного отсчета, как сделать повторение через каждые 48 часов?

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function time() {
        today = new Date();
        today = Math.floor((timeend-today)/1000);
 
        if (today < 0) {
            return;
        }
 
        tsec=today%60; today=Math.floor(today/60); if(tsec<10)tsec='0'+tsec;
        tmin=today%60; today=Math.floor(today/60); if(tmin<10)tmin='0'+tmin;
        thour=today%24; today=Math.floor(today/24); if(thour<10)thour='0'+thour;
        document.getElementById('day').innerHTML=today;
        document.getElementById('day2').innerHTML=today;
        document.getElementById('hour').innerHTML=thour;
        document.getElementById('hour2').innerHTML=thour;
        document.getElementById('minute').innerHTML=tmin;
        document.getElementById('minute2').innerHTML=tmin;
        document.getElementById('sec').innerHTML=tsec;
        document.getElementById('sec2').innerHTML=tsec;
        window.setTimeout("time()",1000);
    }
    
    timeend = new Date();
    timeend = new Date(2014,8,22,23,21);
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.09.2014, 00:13
Ответы с готовыми решениями:

Как реализовать 3 таймера обратного отсчета?
Добрый день! Подскажите, кто знает, как реализовать 3 таймера обратного отсчета в формате...

Цикл таймера обратного отсчета
Привет, друзья! Помогите зациклить таймер обратного отсчета. Сейчас счетчик выставляется вручную...

Создание таймера обратного отсчёта
Здравствуйте, помогите пожалуйста реализовать следующее Есть HTML страница с кнопкой, при нажатии...

Реализация таймера обратного отсчета
Вопрос такой, как реализовать таймер обратного отсчета... Например переменная $t = 50... И в...

7
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,625
23.09.2014, 02:49 2
вам надо, чтобы таймер:
1 октября в 9 вечера показывал "до конца акции -- 1 день 03 часа 00 минут 00 секунд"
2 октября в 9 вечера показывал "до конца акции -- 03 часа 00 минут 00 секунд"
3 октября в 9 вечера показывал "до конца акции -- 1 день 03 часа 00 минут 00 секунд"
4 октября в 9 вечера показывал "до конца акции -- 03 часа 00 минут 00 секунд"
и т.д.
верно ли я понял суть вашей задачи?
0
0 / 0 / 0
Регистрация: 13.06.2014
Сообщений: 51
23.09.2014, 10:51  [ТС] 3
Цитата Сообщение от kalabuni Посмотреть сообщение
вам надо, чтобы таймер:
1 октября в 9 вечера показывал "до конца акции -- 1 день 03 часа 00 минут 00 секунд"
2 октября в 9 вечера показывал "до конца акции -- 03 часа 00 минут 00 секунд"
3 октября в 9 вечера показывал "до конца акции -- 1 день 03 часа 00 минут 00 секунд"
4 октября в 9 вечера показывал "до конца акции -- 03 часа 00 минут 00 секунд"
и т.д.
верно ли я понял суть вашей задачи?
мне 48 часов нужно т.е
1 октября в 9 вечера показывал "до конца акции -- 2 день 00 часа 00 минут 00 секунд" или 1 день 24 часа 00 минут 00 секунд"
1 октября в 9 вечера показывал "до конца акции -- 1 день 00 часа 00 минут 00 секунд"

Добавлено через 26 минут
по идеи должна помочь функция setInterval вместо setTimeout, но все равно не получ
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,625
23.09.2014, 11:58 4
Цитата Сообщение от akafake Посмотреть сообщение
мне 48 часов нужно
я как раз этот вариант вам и расписал, нет разве?

просто временем временем окончания акции я в примере выбрал 12 часов ночи (полночь)
а вы почему-то "упёрлись" в 9 вечера

посмотрите ещё раз внимательнее:
1 октября в 00 часов (в полночь) пишет -- до конца акции 2 дня (т.е. те самые 48 часов)
1 октября в 12 часов дня (в полдень) пишет -- до конца акции 1 день 12 часов
1 октября в 21 час (в 9 вечера) пишет -- до конца акции 1 день 03 часа
2 октября в 00 часов (в полночь) пишет -- до конца акции 1 день
2 октября в 12 часов дня (в полдень) пишет -- до конца акции 12 часов
2 октября в 21 час (в 9 вечера) пишет -- до конца акции 3 часа
0
0 / 0 / 0
Регистрация: 13.06.2014
Сообщений: 51
23.09.2014, 16:11  [ТС] 5
Цитата Сообщение от kalabuni Посмотреть сообщение
я как раз этот вариант вам и расписал, нет разве?
Цитата Сообщение от kalabuni Посмотреть сообщение
посмотрите ещё раз внимательнее:
да, точно. теперь понял

Добавлено через 4 часа 7 минут
добавил условие, но после обнуления все равно ничего. где ошибка?
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function time() {
        today = new Date();
        today = Math.floor((timeend-today)/1000);
 
        if (today < 0) {
            return;
        }
 
        tsec=today%60; today=Math.floor(today/60); if(tsec<10)tsec='0'+tsec;
        tmin=today%60; today=Math.floor(today/60); if(tmin<10)tmin='0'+tmin;
        thour=today%24; today=Math.floor(today/24); if(thour<10)thour='0'+thour;
        document.getElementById('day').innerHTML=today;
        document.getElementById('day2').innerHTML=today;
        document.getElementById('hour').innerHTML=thour;
        document.getElementById('hour2').innerHTML=thour;
        document.getElementById('minute').innerHTML=tmin;
        document.getElementById('minute2').innerHTML=tmin;
        document.getElementById('sec').innerHTML=tsec;
        document.getElementById('sec2').innerHTML=tsec;
        window.setInterval("time()",1000);
    }
    
    timeend = new Date();
    timeend = new Date(2014,8,23,16,03);
    if (today==0 && thour==0 && tmin==0 && tsec==0) {
    time ();
    }
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,625
24.09.2014, 11:48 6
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<script>
onload = function ()
{setInterval (function ()
{
var s = 1000, m = s * 60, h = m * 60, d = h * 24,                       // секунда, минута, час и день в миллисекундах
    a0 = function (x) {return (x / 100).toFixed (2).substr (2)},        // функция добавления стартового нуля
    currentTime = new Date (),                                          // текущий момент времени как объект
    Y = currentTime.getFullYear (),                                     // текущий год
    StartYear = new Date (Y, 0, 1).getTime (),                          // старт текущего года в миллисекундах
    nd  = parseInt ((currentTime.getTime () - StartYear) / d) + 1,      // номер текущего дня с начала года
    EndTime = StartYear + (nd + (nd % 2)) * d,                          // момент окончания акции в миллисекундах
    Delta = EndTime - currentTime,                                      // общее количество миллисекунд до конца акции
    dD = Math.floor (Delta / d),                                        // в т.ч. дней
    hD = Math.floor (Delta % d / h),                                    //        часов
    mD = Math.floor ((Delta - dD * d - hD * h) / m);                    //        минут
    sD = Math.floor ((Delta - dD * d - hD * h - mD * m ) / s);          //        секунд
with (document) getElementById('mD').innerHTML= dD,
                getElementById('mH').innerHTML= a0 (hD), 
                getElementById('mM').innerHTML= a0 (mD), 
                getElementById('mS').innerHTML= a0 (sD);
}, 1000);
}
</script>
<b>До конца акции осталось:</b>
<p>дней - <b id="mD"></b>
<p>часов  - <b id="mH"></b>
<p>минут  - <b id="mM"></b>
<p>секунд - <b id="mS"></b>
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,625
25.09.2014, 16:48 7
------------------
0
279 / 279 / 62
Регистрация: 28.08.2014
Сообщений: 432
26.09.2014, 13:15 8
Цитата Сообщение от akafake Посмотреть сообщение
где ошибка?
Условие (today==0 && thour==0 && tmin==0 && tsec==0), надо понимать, обозначает, что настоящий момент совпал с моментом, на который запланирована акция. И когда наступит совпадение, Вы намерены запускать некую функцию. Но ведь для этого нужно, чтобы пользователь находился за компьютером и запускал Ваш скрипт именно в этот торжественный момент. Иначе условие не сработает: акция будет либо ДО, либо ПОСЛЕ настоящего момента.

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

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
function time(timeend) {
 today = new Date();
 today = Math.floor((timeend-today)/1000);
 
tsec=today%60; today=Math.floor(today/60); if(tsec<10)tsec='0'+tsec;
 tmin=today%60; today=Math.floor(today/60); if(tmin<10)tmin='0'+tmin;
 thour=today%24; today=Math.floor(today/24); if(thour<10)thour='0'+thour;
 document.getElementById('day').innerHTML=today;
 document.getElementById('day2').innerHTML=today;
 document.getElementById('hour').innerHTML=thour;
 document.getElementById('hour2').innerHTML=thour;
 document.getElementById('minute').innerHTML=tmin;
 document.getElementById('minute2').innerHTML=tmin;
 document.getElementById('sec').innerHTML=tsec;
 document.getElementById('sec2').innerHTML=tsec;
 }
 
function start_timer(){
var action_date = "09/23/2014 12:00";
var timeend= new Date(action_date); //точка отсчета
var now = new Date();
var update_interval = 48; //через сколько часов возобновлять
 
// если от точки отсчета по сейчас прошло больше 48 часов, то новая точка отсчета = timeend + (N+1)*48
// т.е. timeend отодвигается на (N+1)*48 часов в будущее.
var N = Math.floor((now-timeend)/(60*60*1000*update_interval)); 
if(N >= 0) { // т.е. если точка now перегнала точку timeend на временной шкале
              timeend.setTime(timeend.getTime()+ (N+1)*update_interval*60*60*1000);  // отодвигаем timeend в будущее
}
 
time(timeend);
setInterval(function(){time(timeend);},1000);
}
 
$(document).ready(function(){start_timer();});
Добавлено через 13 часов 18 минут
Немножко вчера перемудрила.
Идея такая. Проверяем, находится ли момент начала акции timeend в будущем или в прошлом. Если в будущем, ничего не делаем. Если в прошлом, отодвигаем его в будущее.
Двигать надо на 48 часов на временной интервал, кратный 48 часам - на 48*N, где N определяется тем, насколько далеко timeend находится от now. Причем timeend должен уехать в будущее не более, чем на 48 часов от now.

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function start_timer(){
var action_date = "09/23/2014 12:00";
var timeend= new Date(action_date); //точка отсчета
var now = new Date();
var update_interval = 48; //через сколько часов возобновлять
 
if (timeend < now) {
              var N = Math.ceil((now-timeend)/(60*60*1000*update_interval)); 
              timeend.setTime(timeend.getTime()+ N*update_interval*60*60*1000);  
}
 
time(timeend);
setInterval(function(){time(timeend);},1000);
}
Таким образом, функция time(timeend) выводит надпись "До акции осталось ..." в зависимости от того, какой задан момент начала акции timeend, а функция start_timer() двигает, если нужно, этот момент на 48 часов (точнее на 48*N).
Если уж быть совсем педантами, можно установить setInterval и запускать start_timer() каждые 48 часов. Но этот setInterval сработает, только если кто-либо просидит на этой странице 48 и более часов)))
0
26.09.2014, 13:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.09.2014, 13:15
Помогаю со студенческими работами здесь

Cоздание таймера обратного отсчёта
Здравствуйте, у меня вопрос: хочу создать тестовую программу с 14 вопросами, т.е. 14 форм, основная...

Проблема настройки таймера обратного отсчета в JavaScript
Доброго времени суток.Получил в наследство сайт с таймером обратного отсчета,столкнулся с такой...

Не могу разобрать код таймера обратного отсчета
где в этом коде момент, в котором секунд становится на единицу меньше?function startTimer(duration,...

Реализовать работу таймера для обратного отсчета времени
При запуске главной формы нажимаем кнопку &quot;Начать&quot; -&gt; должна появиться форма &quot;Указать время в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru