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);
您 return 提前退出此功能。
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;
终止函数的执行并且 returns d
的值
此时您已 d
设置为本周六,您希望它是下周六,因此您需要添加:
d.setDate(d.getDate() + 7);
在你之前 return d
.
解释:
如果上面的语句基本上是说,"If it's after 8:00pm on Saturday, set d to 8:00pm on Saturday." 您的代码将在星期日 12:00am 再次开始工作,当它开始将日期重置为下一个星期六时,您只是忘记了增加日期如果恰好是星期六,就像您在一周中的所有其他日子一样。
代码应该是:
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;
}
我的倒计时应该在每周六晚上 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);
您 return 提前退出此功能。
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;
终止函数的执行并且 returns d
此时您已 d
设置为本周六,您希望它是下周六,因此您需要添加:
d.setDate(d.getDate() + 7);
在你之前 return d
.
解释:
如果上面的语句基本上是说,"If it's after 8:00pm on Saturday, set d to 8:00pm on Saturday." 您的代码将在星期日 12:00am 再次开始工作,当它开始将日期重置为下一个星期六时,您只是忘记了增加日期如果恰好是星期六,就像您在一周中的所有其他日子一样。
代码应该是:
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;
}