javascript Datum getYear() liefert unterschiedliches Ergebnis zwischen IE und Firefox, wie man diesen Ansatz?
Anscheinend javascript-date-Objekt die Methode getYear() liefert unterschiedliches Ergebnis zwischen IE8 und Firefox3.6 (ich habe diese 2 auf meinem Rechner, nicht sicher, dass andere browser oder version)
Date d = new Date();
alert(d.getYear());
FF3.6 ==> 111 (year since 1900? i guess)
IE8 ===> 2011
Ich habe nur Tests auf Firefox und jetzt ist mein Javascript code anpassen, der zurückgegeben Wert von getYear() jetzt ist mir 3911 wegen meiner Codierung.
var modified = d.getYear() + 1900
Auf Firefox es wieder 2011. Aber wenn ich diesen Ansatz anwenden auf IE8, es wieder 3911.
Ich könnte hinzufügen von Logik zu unterscheiden IE und Firefox, aber ich möchte nicht solch eine if/else-überall in meinem code, wo immer es gibt browser-abhängige Teile wie dieses. Gibt es andere Möglichkeit zur Lösung dieses Problems?
var browserName=navigator.appName;
if (browserName=="Netscape") {
var modified = d.getYear() + 1900
}
else if(browserName=="Microsoft Internet Explorer") {
var modified = d.getYear();
}
- mögliche Duplikate von Warum funktioniert die Javascript getYear() return 108?
- "das Jahr seit 1900? ich denke," Warum denke? Die Spezifikation ist frei verfügbar: ecma-international.org/publications/standards/Ecma-262.htm
- thx für den link, ich werde schauen.
- msdn.microsoft.com/en-us/library/windows/apps/... sagt, dass getYear ist veraltet. Wenn es veraltet ist, warum hat Sie Durcheinander mit ihm?!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden
getFullYear()
stattgetYear()
.getYear
ist y2k-kompatibel ist, da das Ergebnis ist nicht beschränkt auf zwei Ziffern. Zum Beispiel, wird es wieder 112 für das Jahr 2012, nicht 12. Es ist ein unixy Sache.versuchen getFullYear() statt getYear
Wenn der IE8 ist Ihnen 2011,Es ist ein Fehler in IE8 (und früher, siehe update unten).getYear
definiert ist, in die Spezifikation (Abschnitt B. 2.4) als:NaN
, zurückNaN
.YearFromTime(LocalTime(t)) − 1900
.Damit Recht jetzt, 111 ist der richtige Wert. Diese definition ist unverändert aus der 3. edition, also wir reden hier von ~12 Jahren angegeben Verhalten.
Wie schon andere gesagt haben, verwenden Sie
getFullYear
zu bekommen, ein nützlicher Wert, aber das ist ein IE8-bug, wenn es wirklich ist wie du sagst (ich habe nicht IE8 praktisch zu überprüfen).Update: Gut ich sein werde. Habe es gerade ausprobiert, und Microsoft hat bekommen es falsch. IE6, IE7 und IE8, alle sagen "2011". Die gute Nachricht ist, haben Sie endlich behoben, IE9 sagt, "111", wie es sollte. Sie können versuchen, es in Ihrem browser hier: http://jsbin.com/ofuyi3
Verlassen Sie sich nicht auf Produkt-Versionen, wenn Sie nicht haben, um. Verlassen Sie sich lieber auf die Differenz, die Sie wollen, sich selbst zu korrigieren. Wenn Sie wollte
getYear
's richtige Wert, man könnte es mitMerke ich, die Leute haben vorgeschlagen, einen besseren Weg, um den Ergebnis, aber ich dachte, die tatsächliche Frage war es Wert, zu beantworten.
Verwenden Datum.getFullYear();
bla.. muss die Antwort mit mindestens 30 Zeichen...