当前位置: 首页 > 知识库问答 >
问题:

浏览器中的UTC javascript倒计时为负数

穆高澹
2023-03-14

我试图制作一个在浏览器中工作的UTC午夜的JavaScript倒计时器(通常转换为本地时间)。

这是我现在在我的网站上使用的东西。

  setInterval(() => {
    let toDate = new Date()
    let tomorrow = new Date()
    tomorrow.setHours(24, 0, 0, 0)
    let diffMS =
      tomorrow.getTime() / 1000 -
      toDate.getTime() / 1000 -
      toDate.getTimezoneOffset() * 60
    let diffHr = Math.floor(diffMS / 3600)
    diffMS = diffMS - diffHr * 3600
    let diffMi = Math.floor(diffMS / 60)
    diffMS = diffMS - diffMi * 60
    let diffS = Math.floor(diffMS)
    let result = diffHr + ' hours '
    result += diffMi + ' minutes '
    result += diffS + ' seconds '
    this.timeRemaining = result
  }, 1000)

共有1个答案

杨志强
2023-03-14

不确定您的问题来自哪里,但使用由偏移量调整的当地时间有点令人担忧。此外,偏移量在DST边界上变化,因此这也可能是一个问题(或不是),因此倒计时将跳转等效于偏移量的变化(+或-)。

使用UTC方法设置结束并向下倒数要简单得多,例如。

// Return time to next UTC midnight as x hours x minutes x seconds
function toMidnightUTC(date = new Date()) {
  let d = new Date(+date);
  d.setUTCHours(24,0,0,0);
  let diff = d - date;
  return `${diff/3.6e6 |0} hours ` +
         `${diff%3.6e6 / 6e4 |0} minutes ` +
         `${diff%6e4 / 1000 |0} seconds`;
}

// Run  20ms after next full second
let runIt = ()=> {
  document.getElementById('s0').textContent = toMidnightUTC();
  let lag = 1020 - new Date() % 6e4;
  setTimeout(runIt, lag);
};

// Start the process…
runIt();
<span id="s0"></span>
 类似资料:
  • 问题内容: 我已经在JavaScript中看到了许多倒数计时器,并希望在React中使用它。 我借用了我在网上找到的此功能: 然后我自己写了这段代码 当前onclick会将其在屏幕上的时间设置为: 但不会将其减少到,然后等等等 我想我需要使用其他参数再次调用该函数。我该怎么做呢? 编辑:我忘了说,我想要功能,这样我就可以使用秒到分钟和秒 问题答案: 您必须每秒剩余几秒钟(每次调用间隔)。这是一个例

  • 问题内容: 浏览器是否内置了超时功能,如果可以,它们是什么? 我有一个页面,该页面在最多运行5分钟的进程上执行AJAX调用。有人说浏览器在2分钟后超时,但不知道这有什么道理。 问题答案: 它取决于浏览器。“默认情况下,InternetExplorer的KeepAliveTimeout值为一分钟,其他限制因素(ServerInfoTimeout)为两分钟。这两种设置都会导致InternetExplo

  • 问题内容: 我正在写一个基于AJAX / COMET的在线聊天室。我的设计是: 请求 -----------------等待------------------------->发送转储数据 -----------------等待------------------------->发送转储数据 -----------------等待------------------------->发送转储数据 -

  • 我正在尝试在两个日期之间创建倒计时,但时间过了一段时间就落后了。 我的PHP后端返回当前时间和未来X时间之间的差值,例如当前时间和提前2小时。这个差异在类,格式如下,我使用javascript函数对差异进行倒计时。以下是我的功能: 代码按预期工作,但几分钟后,比方说2-3分钟,如果您刷新页面或在新窗口中打开它,您将看到倒计时计时器落后秒/分钟。有人知道我做错了什么吗?

  • 本文向大家介绍Flutter倒计时/计时器的实现代码,包括了Flutter倒计时/计时器的实现代码的使用技巧和注意事项,需要的朋友参考一下 在我们实现某些功能时,可能会有倒计时的需求。 比如发送短信验证码,发送成功后可能要求用户一段时间内不能再次发送,这时候我们就需要进行倒计时,时间到了才允许再次操作。 如下图: 为了实现这样场景的需求,我们需要使用 Timer.periodic 。 一、引入Ti