js中每周重复倒计时,困扰我的小细节

Recurring weekly countdown in js, small detail that bothers me

提问人:berthemoose 提问时间:11/17/2023 最后编辑:berthemoose 更新时间:11/17/2023 访问量:43

问:

在这里找到了一个脚本,我想使用它:

var curday;
var secTime;
var ticker;
 
function getSeconds() {
 var nowDate = new Date();
 var dy = 4 ; //Sunday through Saturday, 0 to 6
 var countertime = new Date(nowDate.getFullYear(),nowDate.getMonth(),nowDate.getDate(),20,30,0); //20 out of 24 hours = 8pm
 
 var curtime = nowDate.getTime(); //current time
 var atime = countertime.getTime(); //countdown time
 var diff = parseInt((atime - curtime)/1000);
 if (diff > 0) { curday = dy - nowDate.getDay() }
 else { curday = dy - nowDate.getDay() -1 } //after countdown time
 if (curday < 0) { curday += 7; } //already after countdown time, switch to next week
 if (diff <= 0) { diff += (86400 * 7) }
 startTimer (diff);
}
 
function startTimer(secs) {
 secTime = parseInt(secs);
 ticker = setInterval("tick()",1000);
 tick(); //initial count display
}
 
function tick() {
 var secs = secTime;
 if (secs>0) {
  secTime--;
 }
 else {
  clearInterval(ticker);
  getSeconds(); //start over
 }
 
 var days = Math.floor(secs/86400);
 secs %= 86400;
 var hours= Math.floor(secs/3600);
 secs %= 3600;
 var mins = Math.floor(secs/60);
 secs %= 60;

 

 //update the time display
 document.getElementById("days").innerHTML = curday;
 document.getElementById("hours").innerHTML = ((hours < 10 ) ? "0" : "" ) + hours;
 document.getElementById("minutes").innerHTML = ( (mins < 10) ? "0" : "" ) + mins;
 document.getElementById("seconds").innerHTML = ( (secs < 10) ? "0" : "" ) + secs;


if (curday == 1) {
    document.getElementById("days_text").innerHTML = "Day"
} 


}

我了解它是如何工作的,并且可以从这里使用它,但我想更深入地了解原因:

 if (diff <= 0) { diff += (86400 * 7) }

我们增加了整整一周的秒数,而 diff 计算的唯一内容是我们在给定的一天是否超过了目标小时数。为什么它必须是整整一周,而不仅仅是 24 小时?非常感谢您的帮助。

JavaScript的

评论

0赞 David 11/17/2023
如果将值更改为 24 小时,生成的功能会发生什么情况?这是您进行一些测试和调试的好机会。
0赞 berthemoose 11/17/2023
好问题,会尽量让你知道,谢谢。
0赞 CBroe 11/17/2023
你提到的那个问题明确是关于将每天凌晨 5:30 重置的脚本更改为每周重置一次......不知道为什么你惊讶地看到现在在那里增加了一周的时间。
0赞 CBroe 11/17/2023
“通过将硬编码的日期索引 (4) 与 nowDate().getDay() 进行比较来处理日期差异” - getDay 返回一个介于 0 和 6 之间的数字,0 表示星期日,依此类推。最初问题的上下文是每周四重置它 - 按该顺序 天数 .4
0赞 berthemoose 11/17/2023
@CBroe我现在明白了。我希望我的计数器每天都能重置。我希望它指向 2030 年下一个星期四,在一周中的任何给定时间。所以对我来说,如果程序检查距离下周四还有多少天,然后距离下一个 2030 年有多少秒,就足够了。除此之外,一切都在我想在 html 中显示的数据选择中处理。现在我看得很清楚。感谢您指出

答: 暂无答案