【问题标题】:Use desired timezone in javascript 24 hour countdown or offset the countdown so it hits 00:00 at 11:00 local time instead of at 00:00 local time在 javascript 24 小时倒计时中使用所需的时区或偏移倒计时,使其在当地时间 11:00 到达 00:00,而不是在当地时间 00:00
【发布时间】:2017-09-10 05:10:59
【问题描述】:

我有这个 24 小时循环倒计时,我需要它在每天 11:00 重置,而不是像现在这样在 00:00 重置,现在它使用本地时区,所以要么必须更改它使用的时区或按 11 小时计算。

我需要做的下一个事情是格式化它,这样当小时和分钟达到一位数字值时,它将在那个 nuber 之前用零格式化,所以 05:02:55 而不是 5:2:55 之类的现在。 有人能帮我吗?谢谢

脚本如下:

在这里写:http://codepen.io/anon/pen/bWGRoa

setInterval(function time(){
  var d = new Date();
  var hours = 23 - d.getHours();
  var min = 60 - d.getMinutes();
  if((min + '').length == 10){
    min = '0' + min;
  }
  var sec = 60 - d.getSeconds();
  if((sec + '').length == 1){
        sec = '0' + sec;
  }
  jQuery('#the-final-countdown p').html(hours+':'+min+':'+sec)
}, 1000);

【问题讨论】:

  • 就像注释一样:您可以将jQuery 语句重写为document.querySelector('#the-final-countdown p').innerHTML=hours+':'+min+':'+sec;。它可能看起来稍长一些,但是,通过避免 jQuery 调用,它将节省几十而不是几百步。 jQuery 对于解释简单语句非常啰嗦。
  • 另外,您可以通过这种方式将分钟和秒(为什么不使用小时?)归零:min=('0'+min).slice(-2);sec=('0'+sec).slice(-2);。这也将修复您的代码中的一个错误,该错误会为您的分钟测试长度为 10。
  • 在codepen中,他的分分和秒分都有length == 1,所以我认为这只是问题中的一个错字。
  • 感谢修复了格式,现在我只需要抵消它达到0的时间,仍然不知道如何
  • 不是最优雅的,但您可以执行if(d.getHours() <= 22){ hours = 22 - d.getHours(); }else{ hours = 24 - d.getHours(); } 之类的操作。没有测试第二部分

标签: javascript loops time timer clock


【解决方案1】:

要忽略用户的时区,您需要使用Date 的UTC 版本。请记住,您设置的翻转时间也是 UTC。

即使在夏令时更改期间也要获得准确的持续时间,您应该坚持使用日期算术。

function time() {
    var d1 = new Date();
    var d2 = Date.UTC(d1.getUTCFullYear(),
                      d1.getUTCMonth(),
                      d1.getUTCDate() + (d1.getUTCHours() < 11 ? 0 : 1),
                      11);
    var dh = d2 - d1;
    var hours = Math.floor(dh / 3600000);
    var dm = dh - 3600000 * hours;
    var min = Math.floor(dm / 60000);
    var ds = dm - 60000 * min;
    var sec = Math.floor(ds / 1000);
    var dmilli = ds - 1000 * sec;
    setTimeout(time, dmilli);
    hours = ('0' + hours).slice(-2);
    min = ('0' + min).slice(-2);
    sec = ('0' + sec).slice(-2);
    document.querySelector('#the-final-countdown p').innerHTML = hours + ':' + min + ':' + sec;
}
time();

d2 是计数器将翻转的Date。相应地进行调整。

作为奖励,它会反复调用setInterval(),以便倒计时与挂钟同时滴答。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 2016-10-12
    • 2015-02-25
    相关资源
    最近更新 更多