0

我需要一个计时器一次倒计时 4 小时,然后在达到 0 后重新启动。所有客户端的剩余时间必须相同。我目前有这个:

function addZero(i) {
  if (i < 10) {
    i = "0" + i;
  }
  return i;
}
setInterval(function() {
  function addZero(i) {
    if (i < 10) {
      i = "0" + i;
    }
    return i;
  }
  var d = new Date();
  var s = (d.getSeconds());
  var m = (d.getMinutes());
  var x = document.getElementById("timer");
  var c = addZero(30 - m) + ":" + addZero(60 - s);
  var d = addZero(60 - m) + ":" + addZero(60 - s);
  if (m < 30) {
    t = c
  } else {
    t = d
  }

  x.innerHTML = t;
}, 250)
<div align="center">
  <table>
    <tbody>
      <td style="font-size:15px;">Time to next restart:</td>
      <td style="font-size:16px;" id="timer"></td>
      <td nowrap="nowrap" width="15px">
        <p style="text-align: left;"></p>
      </td>
    </tbody>
  </table>
</div>

倒计时 30 分钟,然后重置回 30。但是,当它到达最后一秒时,它会计算 60,而不是直接到 59(所以 4:00/3:60/3:59)。它还需要从美国东部标准时间中午(中午 12 点)开始倒计时。我想以h:mm:ss格式显示时间,我也错过了上面代码中的时间。

4

1 回答 1

0

使用 PHP 在初始页面加载时获取日期/时间,而不是客户端/JS Date() - 这在机器之间可能有很大不同,因此如果您希望客户端同步它是没有价值的(PHP 日期将来自服务器时钟,所以如果它是正确的,您可以将多个客户端同步到它)。即使以这段时间为基础,然后在客户端倒计时四个小时,也不太可能导致时间同步良好——我会定期参考服务器来同步它。

至于你显示 60 的问题,你能不能像这样替换代码中的数字:

var d = addZero(60 - m) + ":" + addZero(60 - s);

变成

var d = addZero(59 - m) + ":" + addZero(59 - s); 

?

看到返回值将始终为 0-59,这只会将其反转,您不会得到负数,它将显示数字时钟的实际情况(您永远不会看到它们达到 60 分钟/秒,它们会重置为 0)。

我会用 JS 来计算分钟/秒,因为如此频繁地引用服务器是没有意义的——如果你在同步时发现了一个差异,那么如果你不让它太久,它就不太可能太高检查之间的时间(如 4 小时)。

这实际上是为了什么?

于 2013-02-02T02:28:47.987 回答