简体   繁体   English

每周重复倒计时

[英]Repeating countdown timer for each week

I am trying to set a countdown timer that repeats weekly every thurday at 8pm PST however the timer I have now just repeats every friday at midnight.我正在尝试设置一个倒数计时器,每周四在太平洋标准时间晚上 8 点重复,但是我现在的计时器只是在每个星期五午夜重复。 I have tried changing some variables however it doesnt seem to have changed the overall time.我试过改变一些变量,但它似乎并没有改变整体时间。

function CountDown(id, day, time) {

function update() {

    // Get current date and time
    var today = new Date();

    // Get number of days to Friday
    var dayNum = today.getDay();
    var daysToFri = day - (dayNum < day ? dayNum : dayNum - 7);

    // Get milliseconds to noon friday
    var fridayNoon = new Date(+today);
    fridayNoon.setDate(fridayNoon.getDate() + daysToFri);
    fridayNoon.setHours(
        time.split(':')[0],
        time.split(':')[1],
        time.split(':')[2],
        time.split(':')[3]
    );
    // Round up ms remaining so seconds remaining matches clock
    var ms = Math.ceil((fridayNoon - today) / 1000) * 1000;
    var d = ms / 8.64e7 | 0;
    var h = (ms % 8.64e7) / 3.6e6 | 0;
    var m = (ms % 3.6e6) / 6e4 | 0;
    var s = (ms % 6e4) / 1e3 | 0;

    // Display the result in the element with id="demo"
    // document.getElementById(id).innerHTML = d   , h  , m  , s ;style='display:flex; flex-direction:column;'
    // document.getElementById(id).innerHTML = h;
    d = d<10? "0"+d: d;
    h = h<10? "0"+h: h;
    m = m<10? "0"+m: m;
    s = s<10? "0"+s: s;
    document.getElementById(id).innerHTML =  "<div class='clabel'> <p class='countertext'> DAYS </p><h1 class='cnumber days' > "+  d +"</h1></div>" + "<div class='clabel'> <p class='countertext'>HOURS</p><h1 class='cnumber hours'>"+ h +"</h1></div>" + "<div class='clabel'> <P class='countertext'>MINUTES</P><h1 class='cnumber'>"+ m +"</h1></div>"  + "<div class='clabel'><P class='countertext'>SECONDS</p><h1 class='cnumber'>"+ s +"</h1></div>";
    // document.getElementById(id).innerHTML =  "<span  class='c-name'><strong>DAYS</strong></span> " + "<h1 style='font-size:10rem; '>"+ d +"</h1>" + "<span  class='c-name'> <strong>HOURS</strong></span> "
    // + "<h1 style='font-size:10rem;'>"+ h +"</h1>" + "<span class='c-name'> <strong>MINUTES</strong></span> " + "<h1 style='font-size:10rem;'>"+ m +"</h1>" +"<span class='c-name'> <strong>SECONDS</strong></span> " + "<h1 style='font-size:10rem;'>"+ s +"</h1>";

}

// Run update just after next full second
function runUpdate() {
    update();
    setTimeout(runUpdate, 1020 - (Date.now() % 1000));
}

runUpdate();

} }

Check out this answer: JS Countdown that can reset every week on a specific day and time看看这个答案: JS Countdown,可以在特定的日期和时间每周重置

Copying solution code below for ease.为方便起见,复制下面的解决方案代码。

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
 }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM