簡體   English   中英

Javascript倒計時不會在每個星期六重復

[英]Javascript countdown not repeating every saturday

我的倒數應該在每個星期六的晚上8點(gmt + 2)重復,但是一旦到達晚上8點,倒數就會停留在EXPIRED上。 我不明白為什么,有人知道這個問題嗎?

提前感謝您的幫助和感謝。

 function nextSaturday() {
    var d = new Date();
    console.log(d.getDay());
    if (d.getDay() == 7 && d.getHours() < 20){
      d.setHours(20);
      d.setMinutes(0);
      d.setSeconds(0);
      return d;
    }
    switch (d.getDay()) {
        case 0: d.setDate(d.getDate() + 6);
            break;
        case 1: d.setDate(d.getDate() + 5);
            break;
        case 2: d.setDate(d.getDate() + 4);
            break;
        case 3: d.setDate(d.getDate() + 3);
            break;
        case 4: d.setDate(d.getDate() + 2);
            break;
        case 5: d.setDate(d.getDate() + 1);
            break;
        case 6: d.setDate(d.getDate() + 0);
            break;
    }
    d.setHours(20);
    d.setMinutes(0);
    d.setSeconds(0);
    return d;
}

var end = nextSaturday();
var _second = 1000;
var _minute = _second * 60;
var _hour = _minute * 60;
var _day = _hour * 24;
var timer;

function showRemaining() {
    var now = new Date();
    var distance = end - now;
    if (distance < 0) {

        clearInterval(timer);
        document.getElementById("countdown").innerHTML = "EXPIRED!";

        return;
    }
    var days = Math.floor(distance / _day);
    var hours = Math.floor((distance % _day) / _hour);
    var minutes = Math.floor((distance % _hour) / _minute);
    var seconds = Math.floor((distance % _minute) / _second);

    document.getElementById("countdown").innerHTML = "Countdown ends in: ";
    document.getElementById("countdown").innerHTML += days + " days ";
    document.getElementById("countdown").innerHTML += hours + " hours ";
    document.getElementById("countdown").innerHTML += minutes + " minutes and ";
    document.getElementById("countdown").innerHTML += seconds + " seconds left";

}
showRemaining();
timer = setInterval(showRemaining, 1000);

您將盡早從此功能返回。

if(d.getDay() == 7 && d.getHours() < 20) { 
  d.setHours(20);
  d.setMinutes(0);
  d.setSeconds(0);
  return d; //right here you are exiting your loop at 8:00 (20 hours)
}

return d; 終止函數的執行並返回d的值

你已經d這個點設置到這個星期六,你希望它是下周六,所以你需要補充一點:

d.setDate(d.getDate() + 7);

在您返回d之前。

說明:

上面的if語句基本上是說:“如果在星期六晚上8:00之后,請將d設置為星期六晚上8:00”。 當代碼開始將日期重置為下一個星期六時,您的代碼將在星期日的12:00 am重新開始工作,如果您恰好像在一周中所有其他天一樣都是星期六,則您只是忘記了增加日期。

該代碼完全應該是:

if(d.getDay() == 7) { //note: I've also updated this line to account for changes in hours
  d.setHours(20);
  d.setMinutes(0);
  d.setSeconds(0);
    if(d.getHours() >= 20)
      d.setDate(d.getDate() + 7);
  return d;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM