2009-08-07 99 views
1

我试图用javascript做一个非常基本的日期差异计算,但是从setInterval()获取混合行为。来自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); 

我不明白这一点。如果我可以每秒显示日期,为什么我无法每秒显示日期的差异?

+0

对不起,本意是要写入init。但不,它不影响结果。 – Sampson 2009-08-07 19:18:08

+3

日期对象不会始终获得默认值作为当前日期/时间,因此您只更改年份值,差异始终是相同的... 26年。 – 2009-08-07 19:22:07

+0

我认为你应该向社区添加[facepalm]标记Jonathan:P – annakata 2009-08-07 19:27:48

回答

4

每次调用该函数时,都会重置today,所以在时间变化时,“today”和“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); 
});  
+0

这很奇怪。解决问题,但没有意义:)如果我每次不断分配日期,为什么会这么重要... – Sampson 2009-08-07 19:22:35

+0

我扩展了我的解释。希望现在更有意义。 :-) – 2009-08-07 19:24:20

+0

@Jonathan - 因为A + B和A之间的区别总是B,不管A的值是什么。 – annakata 2009-08-07 19:26:54

0

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

2

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

0

我认为你会发现它实际上是不断更新的(只需在函数中加入一个警报就可以看到),你的问题是这个值是相同的时间。

0

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

这是部分工作,如果你坐在那里一整年你会看到差异