检测Date()。getSeconds()具有新值

时间:2014-01-16 05:26:54

标签: javascript

我想尽快发现Date().getSeconds()值的变化。

我目前使用:

function updateClock {
  ....
}
function detectChange(previousSec) {
  var currentSec = new Date().getSeconds();
  if (previousSec !== currentSec) {
    updateClock();
  }
}
setInterval(function () {
  var dat = new Date();
  var sec = dat.getSeconds;
  detectChange(sec);
}, 10);

有更好的方法吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

两步流程怎么样?

首先,将时钟与系统的0毫秒标记对齐

setTimeout(startClock, 1000 - (new Date()).getMilliseconds());

然后,你只需要每秒打一次

function startClock() {
  setInterval(function do_your_thing() { ... }, 1000);
}

Practical demonstration (jsfiddle)表明即使你在周期中做了大量工作,这种方法也非常稳定。事实上,在我的机器上,你获得的精度比±16ms resolution typically achievable in desktop task schedulers更好。

答案 1 :(得分:0)

不幸的是,当时钟变化秒时没有标准事件触发,所以你需要设置一个间隔来检测它。

设置每1000毫秒的间隔意味着您的时钟可能会关闭几乎一整秒。因此,我可以理解为什么你想要检查秒数而不是每秒一次。这里的核心概念是抽样率。我们采样的速度越快,我们就越精确,但处理时间越多,浪费在检测变化上。

我认为这对你有用。

function updateClock (date) {
  console.log(date);
};

(function () {

  var oldDate = new Date();

  return setInterval(function () {
    var date = new Date();
    if (date.getSeconds() != oldDate.getSeconds()) {
      updateClock(date);
    }
    oldDate = date;
  }, 10); // precision is ~10ms

})();

答案 2 :(得分:-1)

每一秒后它会有一个新值,因此只需要一个1秒间隔的计时器。