js写出以下倒计时:当天时间倒计时到次日10点,次日之后每到0点开始倒计时到第二天的十点

小弟js比较弱,只能写出当前时间到给定时间的倒计时,求大牛解答,必将好好学习研究,谢谢。

阅读 4.5k
3 个回答
let now = Date.now();
let result = '';
let deadline = 10;
setInterval(() => {
    const ten = new Date();
    if(new Date(now).getHours() > deadline) {
        ten.setDate(new Date(now).getDate() + 1);
    }
    ten.setHours(deadline);
    ten.setMinutes(0);
    ten.setSeconds(0);
    const interval = Math.ceil(ten.valueOf() - new Date(now).valueOf()) / 1000;
    const hour = Math.floor(interval / 3600);
    const minutes = Math.floor((interval % 3600) / 60);
    const second = Math.floor(interval % 60);
    result = hour + ' : ' + minutes + ' : ' + second;
    now = Date.now();
    console.log(result)
}, 1000);

效果:https://codepen.io/xiaoyi_122...

思路:(次日10点的时间戳-当天时间时间戳)等于 0结束;
(第二天10点时间戳-当天时间0点时间戳)等于0结束。

好似写的有点复杂。把倒计时时间,重置时间,计时器的偏差都加上了。

var s = 1000,
    m = 60 * s,
    h = 60 * m,
    d = 24 * h,
    tick_time = 1000,
    timezone = new Date().getTimezoneOffset() * m;

var getDayTime = function(t) {
  t = t.split(':');
  return t[0] * h + t[1] * m;
}

var getNextClock = function(clockTime, resetTime, now) {
  var result = now_d = parseInt(now / d, 10) * d + timezone;
  now_d_t = now - now_d;
  if (now_d_t > resetTime) {
    result += d;
  }
  return result + clockTime;
};

var before = 0,
  resetTime = getDayTime('00:00'),
  clock24 = getDayTime('10:00');

var tickHandler = function() {
  var now = Date.now();
  if (now - before > tick_time) {
    var nextClock = getNextClock(clock24, resetTime, now);
    var diff = nextClock - now;
    var floor = Math.floor;
    var diif_readable = [
      floor(diff / d),
      floor((diff % d) / h),
      floor((diff % h) / m),
      floor((diff % m) / s)
    ];
    console.log(diif_readable);
    before = now;
  }
};
var handler = setInterval(tickHandler, tick_time/10);
tickHandler();
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题