来自setInterval()的奇怪行为

时间:2009-08-07 19:09:04

标签: javascript datetime setinterval

我正在尝试使用javascript进行非常基本的日期差异计算,但是我从setInterval()获得混合行为。

不断更新:

var init = setInterval(function(){
  document.getElementById("txt").innerHTML = new Date();
}, 1000);

但这只会更新一次:

var init = setInterval(function(){
  var today = new Date();
  var started = new Date(); started.setYear(1983);
  var difference = today - started;
  document.getElementById("txt").innerHTML = difference;
}, 1000);

我不明白。如果我可以每秒显示日期,为什么我不能每秒显示日期的差异?

5 个答案:

答案 0 :(得分:4)

每次调用函数时都会重置today,所以当时间发生变化时,“今天”和“今天,1983”之间的差异始终是相同的。

today的分配移出区间,所以它只设置一次,为我工作。我看到数字每秒都在变化。

$(function () {
  today = new Date(); 
  var x = setInterval(function(){
    started = new Date(); started.setYear(1983);
    difference = today - started;
    document.getElementById("txt").innerHTML = difference;
  }, 1000); 
});    

答案 1 :(得分:2)

它们都是每1000毫秒执行一次(每秒1次);但是每次第二次产生相同的值,820540800000。我假设你也意识到你可以通过明智地使用“var”来避免污染全局名称空间。

答案 2 :(得分:0)

实际上它按预期工作。等到午夜。

答案 3 :(得分:0)

我认为你会发现它实际上是在不断更新(通过在函数中添加警报很容易看到),你的问题是每个时间的值都是相同的。

答案 4 :(得分:0)

问题是您没有完全设置开始日期,只设置年份。因此,每次执行间隔时,您都要更新该日期的秒分钟和小时。要解决此问题,您必须将其设置为特定的年,月,日,小时,分钟,秒和毫秒。

这部分有效,如果你在那里待了整整一年,你会看到差异