Javascript Datum Unterschied Bug?

8

Edit: Es ist kein Fehler, wie Martin darauf hingewiesen hat. Ich überquere gerade die Sommerzeit, daher der 1h Unterschied.

Ich möchte die Differenz in Tagen zwischen "29. März 2010" und "Mar 09 2010" berechnen, also habe ich den folgenden Code:

%Vor%

86400000 ist die Anzahl der Millisekunden an einem Tag und die Differenz zwischen den Daten wird in Millisekunden zurückgegeben. Dies sollte also funktionieren. Nur geht es nicht ganz. Ich bekomme

%Vor%

Es ist der Unterschied zwischen diesen zwei Daten, der falsch ist. Es sollte 1814400000 (21 Tage mal 86400000) sein, aber es ist tatsächlich 1810800000.

Außerdem, wenn ich den Unterschied zu:

ändere %Vor%

der gleiche Unterschied, nur einen Tag zurück verschoben, bekomme ich normale Ergebnisse.

Dies geschieht nur, wenn wir versuchen, (x-y) zu erhalten, wobei x nach dem 29. März 2010 und y vor dem 29. März 2010 ist.

Ich bekomme dies auf Safari 4 und Firefox 3.6 auf dem Mac, sowie IE 8 auf Windows 7. Habe andere Browser nicht ausprobiert.

Mache ich etwas falsch oder ist das ein bekannter Fehler?

    
disc0dancer 05.03.2010, 14:01
quelle

3 Antworten

11

Sie überschreiten eine Sommerzeitgrenze, daher die Differenz von 1 Stunde.

    
Martin 05.03.2010, 14:05
quelle
2

Die Sommerzeit macht die Datumsarithmetik zu einer schwierigen Sache. Das bedeutet, dass 363 Tage jedes Jahr 24 Stunden lang sind, ein Tag 25 Stunden und ein Tag nur 23 Stunden. Persönlich stimme ich für die Abschaffung der Sommerzeit.

In Java gibt es eine GregorianCalendar-Klasse, die trotz DST die Datumsarithmetik korrekt ausführt. Ich schätze, das hilft nicht viel in Javascript.

    
Jay 05.03.2010 14:26
quelle
2

(Ich sehe, du hast den Wechsel erwischt)

Jede Javascript-Abteilung kann Gleitkommaprobleme haben - legen Sie die Genauigkeit fest, die Sie brauchen.

Sie brauchen die Zeit nicht selbst zu bekommen - Javascript übernimmt die Konvertierung für Sie.

%Vor%

/ * zurückgegebener Wert: (Anzahl) 20.96 (Ortszeit. Was vielleicht das ist, was du willst - ansonsten setze die UTC Datumsteile) * /

    
kennebec 05.03.2010 14:28
quelle

Tags und Links