Как перезапустить таймер обратного отсчета на 24 часа после истечения срока действия в javascript?

#javascript #html #timer

#javascript #HTML #таймер

Вопрос:

Я работаю над таймером обратного отсчета, где время длится ежедневно 24 часа. До сих пор он работал отлично, но когда время достигает нуля, я хочу, чтобы он перезапустил таймер еще на 24 часа.

Когда пользователь отправляет платеж, я сохраняю время внесения депозита в unix timestamp и использую его для запуска обратного отсчета в течение 24 часов и даю ему 1% ежедневно, но я не могу запускать его ежедневно.

Что я сделал до сих пор:

     var deposit_time = user.deposit_time;
    var countDownDate = new Date(deposit_time * 1000).getTime()   86400000;
    var x = setInterval(function() {

        var now = new Date().getTime();
        var distance = countDownDate - now;

        var days = Math.floor(distance / (1000 * 60 * 60 * 24));
        var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 *
            60));
        var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
        var seconds = Math.floor((distance % (1000 * 60)) / 1000);
        new Date(Date.now()   (3600 * 1000 * 24))


        document.getElementById("next_income_countdown").innerHTML =
            hours   "h "  
            minutes   "m "   seconds   "s ";

        if (distance < 0) {
            clearInterval(x);
            document.getElementById("next_income_countdown").innerHTML = '00:00:00';
            // run for another 24 hrs
        }
    }, 1000);
 

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

1. Должен ли пользователь поддерживать свой компьютер и браузер в рабочем состоянии 24/7?

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

3. Ну, если компьютер выключен, на стороне клиента ничего не выполняется. Итак, что, по вашему мнению, должно произойти, когда они даже не включают его в течение 24 часов?

Ответ №1:

Просто добавьте значение ms другого дня, 86400000 , countDownDate когда вы достигнете нуля distance , чтобы «сбросить» его:

 var deposit_time = user.deposit_time;
var countDownDate = new Date(deposit_time * 1000).getTime();
var now = new Date().getTime();

// adjust countDownDate if there have been multiple days since deposit
while (now >= countDownDate) {
    countDownDate  = 86400000;
}

var x = setInterval(function() {
    var now = new Date().getTime();
    var distance = countDownDate - now;

    var days = Math.floor(distance / (1000 * 60 * 60 * 24));
    var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
    var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
    var seconds = Math.floor((distance % (1000 * 60)) / 1000);

    document.getElementById("next_income_countdown").innerHTML = hours   "h "   minutes   "m "   seconds   "s ";

    if (distance =< 0) {
        document.getElementById("next_income_countdown").innerHTML = '00:00:00';
        // run for another 24 hrs
        countDownDate  = 86400000;
    }
}, 1000);
 

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

1. Привет, теперь вы увеличили время еще на 24 часа.. Я думаю, что произойдет, если страница обновится?? снова требуется время для внесения депозита и повторного запуска этого кода var deposit_time = user.deposit_time; var countDownDate = new Date(deposit_time * 1000).getTime() 86400000;

2. Ответ обновлен. Теперь он учитывает обновления страницы и наличие нескольких дней с момента внесения депозита.

3. не сбрасывается ли переменная time или countDownDate при обновлении страницы?

4. Переменная countDownDate не «сбрасывается» на странице, обновляется, потому что она вычисляется из переменной user.deposit_time, которая сохраняется между обновлениями страницы.