javascript date getYear () liefert ein anderes Ergebnis zwischen IE und Firefox, wie geht man damit um?

8

Anscheinend gibt die Methode getYear () des javascript date objects ein anderes Ergebnis zwischen IE8 und Firefox3.6 zurück (Ich habe diese 2 auf meinem Rechner, bin mir nicht sicher, ob es ein anderer Browser oder eine andere Version ist)

%Vor%

Ich habe nur auf Firefox getestet und jetzt meinen Javascript-Code, der den Rückgabewert von getYear () anpasst, gibt mir 3911 wegen meiner Codierung.

%Vor%

Auf Firefox gibt es 2011 zurück. Aber wenn ich diesen Ansatz auf IE8 anwende, gibt es 3911 zurück.

Ich könnte Logik hinzufügen, um IE und Firefox zu unterscheiden, aber ich möchte solche if / else nirgendwo in meinem Code hinzufügen, wo immer browserabhängige Teile wie diese sind. Gibt es eine andere Möglichkeit, dieses Problem anzugehen?

%Vor%     
masato-san 23.04.2011, 08:12
quelle

5 Antworten

19

Verwenden Sie .getFullYear () anstelle von .getYear ()

    
psynnott 23.04.2011, 08:17
quelle
8

versuche stattdessen getFullYear () anstelle von getYear

zu verwenden     
Naren Sisodiya 23.04.2011 08:16
quelle
4

Wenn IE8 Ihnen 2011 gibt, Es ist ein Fehler in IE8 (und früher, siehe Update unten) . getYear ist in der Spezifikation (Abschnitt B.2.4) definiert als:

  1. Sei t dieser Zeitwert.
  2. Wenn t NaN ist, geben Sie NaN .
  3. zurück
  4. Gibt YearFromTime(LocalTime(t)) − 1900 zurück.

Also gerade jetzt ist 111 der richtige Wert. Diese Definition ist seit der 3. Ausgabe unverändert, wir sprechen also von 12 Jahren spezifizierten Verhaltens.

Wie andere bereits gesagt haben, verwenden Sie getFullYear , um einen nützlicheren Wert zu erhalten, aber das ist ein IE8-Fehler , wenn er wirklich so ist, wie Sie es sagen (IE8 ist nicht zu überprüfen) .

Update : Nun, ich werde sein. Habe es einfach ausprobiert und Microsoft hat es falsch verstanden. IE6, IE7 und IE8 sagen alle "2011". Die gute Nachricht ist, dass sie es endlich behoben haben, IE9 sagt "111", wie es sollte. Sie können es in Ihrem Browser hier versuchen: Ссылка

    
T.J. Crowder 23.04.2011 08:29
quelle
4

Verlassen Sie sich nicht auf Produktversionen, wenn Sie es nicht müssen. Verlassen Sie sich stattdessen auf den Unterschied, den Sie selbst korrigieren möchten. Wenn Sie den korrekten Wert von getYear hätten, könnten Sie ihn mit

erhalten %Vor%

Ich weiß, dass Leute einen besseren Weg vorgeschlagen haben, um das Ergebnis zu erhalten, aber ich dachte, dass die tatsächliche Frage es wert war, zu beantworten.

    
ikegami 23.04.2011 08:48
quelle
2

Verwenden Sie date.getFullYear ();

blah .. muss mit mindestens 30 Zeichen antworten ...

    
RobG 23.04.2011 08:16
quelle