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

申し訳ありませんが、見ること、部分的に取り組んでいます。しかし、それは結果に影響しません。 – Sampson

+3

Dateオブジェクトは常にデフォルトの値を現在の日付/時刻として取得しません。したがって、年の値のみを変更するため、差は常に同じです... 26年。 –

+0

あなたは[facepalm]タグを追加するためにコミュニティに借りていると思います。Jonathan:P – annakata

答えて

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); 
});  
+0

それは変です。問題を修正しますが、意味がありません:)毎回毎回日付を割り当てていればどうして問題でしょうか... – Sampson

+0

私の説明を拡張しました。うまくいけばもっと意味をなさないでしょう。 :-) –

+0

@Jonathan - A + BとAの違いは、Aの値が何であっても常にBです。 – annakata

0

実際は期待どおりに動作します。深夜までお待ちください。

2

これらは両方とも1000ms(1秒あたり1回)ごとに1回実行されます。 2番目の結果は毎回同じ値820540800000になります。私は、あなたが "var"を賢明に使ってグローバルな名前空間を汚染するのを避けることもできると思います。

0

私はそれが実際に更新されていることを知っていると思います(関数に警告を表示するだけで簡単に見られます)。値はすべての時に同じです。

0

問題は、開始日を完全に、年のみに設定していないことです。したがって、間隔が実行されるたびに、その日の秒と分を更新しています。これを修正するには、特定の年、月、日、時、分、秒、およびミリ秒に設定する必要があります。

は、これはあなたが通年でそこに座っている場合は、initを書くことを意味違い