2009-08-07 28 views
1

Ich versuche, eine sehr grundlegende Datums-Differenz-Berechnung mit Javascript zu machen, bekomme aber ein gemischtes Verhalten von setInterval().Merkwürdiges Verhalten von setInterval()

Diese ständig aktualisiert:

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

aber nur, Updates einmal:

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); 

Ich verstehe es nicht. Wenn ich das Datum jede Sekunde anzeigen kann, warum kann ich den Unterschied in den Daten nicht jede Sekunde anzeigen?

+0

Leider sehen, bedeutete init zu schreiben. Aber nein, es hat keinen Einfluss auf das Ergebnis. – Sampson

+3

Erhält das Date-Objekt nicht immer den Standardwert als aktuelles Datum/Zeit, und da Sie nur den Jahreswert ändern, ist die Differenz immer gleich ... 26 Jahre. –

+0

Ich denke, du schuldest es der Community, den [facepalm] -Tag hinzuzufügen Jonathan: P – annakata

Antwort

4

Sie stellen jedes Mal, wenn die Funktion aufgerufen wird, today zurück. Während also die Zeit sich ändert, ist der Unterschied zwischen "heute" und "heute, 1983" immer gleich.

Verschieben der Zuordnung von today aus dem Intervall, so dass es nur einmal festgelegt ist, funktionierte für mich. Ich sehe, wie sich die Zahl jede Sekunde ändert.

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

Das ist seltsam. Behebt das Problem, macht aber keinen Sinn :) Warum wäre es wichtig, wenn ich jedes Mal ständig das Datum zugewiesen hätte ... – Sampson

+0

Ich habe meine Erklärung erweitert. Hoffentlich macht das jetzt mehr Sinn. :-) –

+0

@ Jonathan - weil der Unterschied zwischen A + B und A immer B ist, egal was der Wert von A ist. – annakata

0

Eigentlich funktioniert es wie erwartet. Warte bis Mitternacht.

2

Beide werden alle 1000ms (1 pro Sekunde) ausgeführt. aber die zweite ergibt jedes Mal den gleichen Wert, 820540800000. Ich nehme an, Sie erkennen auch, dass Sie vermeiden können, den globalen Namensraum durch vernünftige Verwendung von "var" zu verschmutzen.

0

Ich denke, Sie werden feststellen, dass es tatsächlich ständig aktualisiert wird (leicht zu sehen, indem Sie nur eine Warnung in die Funktion), Ihr Problem ist, dass der Wert ist alle Zeit.

0

Das Problem ist, dass Sie das Startdatum nicht vollständig einstellen, nur das Jahr. Sie aktualisieren also bei jeder Ausführung des Intervalls die Minuten und Stunden dieses Datums. Um dies zu beheben, müssen Sie es auf ein bestimmtes Jahr, Monat, Tag, Stunde, Minute, Sekunde und Millisekunde einstellen.

Dies ist teilweise arbeiten, wenn Sie es für ein ganzes Jahr sitzen würden Sie den Unterschied

Verwandte Themen