2009-08-07 40 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

問題是,您沒有完全設置開始日期,只有一年。因此,每次執行間隔時,您都要更新該日期的秒分鐘和小時。要解決此問題,您必須將其設置爲特定年份,月份,日期,小時,分鐘,秒和毫秒。

這是部分工作,如果你坐在那裏一整年你會看到差異