Warum gibt Javascript getYear() 108 zurück?

Lesezeit: 5 Minuten

Warum gibt dieses Javascript 108 statt 2008 zurück? es bekommt den Tag und den Monat richtig, aber nicht das Jahr?

myDate = new Date();
year = myDate.getYear();

Jahr = 108?

  • Oh, die Sünden, die wir begangen haben, als wir versuchten, das Jahr 2000 zu überstehen.

    – DGentry

    18. September 08 um 23:59 Uhr

  • year = myDate.getFullYear() % 100;

    – Andreas Larson

    4. Dezember 12 um 20:01 Uhr


Warum gibt Javascript getYear 108 zuruck
ConroyP

Es ist ein Y2K Dabei werden nur die Jahre seit 1900 gezählt.

Es gibt jetzt potenzielle Kompatibilitätsprobleme getYear() wurde zugunsten von verworfen getFullYear() – von Quirksmodus:

Um die Sache noch komplizierter zu machen, ist date.getYear() heutzutage veraltet und Sie sollten date.getFullYear() verwenden, was wiederum von den älteren Browsern nicht unterstützt wird. Wenn es aber funktioniert, sollte es immer das volle Jahr geben, dh. 2000 statt 100.

Ihr Browser gibt bei diesen beiden Methoden die folgenden Jahre an:

* The year according to getYear(): 108
* The year according to getFullYear(): 2008

Es gibt auch Implementierungsunterschiede zwischen Internet Explorer und Firefox, wie die Implementierung von IE getYear() wurde geändert, um sich zu verhalten getFullYear() – von IBM:

Gemäß der ECMAScript-Spezifikation gibt getYear das Jahr minus 1900 zurück, das ursprünglich „98“ für 1998 zurückgeben sollte. getYear war in ECMAScript Version 3 veraltet und wurde durch getFullYear() ersetzt.

Internet Explorer hat getYear() so geändert, dass es wie getFullYear() funktioniert und Y2k-kompatibel ist, während Mozilla das Standardverhalten beibehalten hat.

Da getFullYear in älteren Browsern nicht funktioniert, können Sie so etwas verwenden:

Date.prototype.getRealYear = function() 
{ 
    if(this.getFullYear)
        return this.getFullYear();
    else
        return this.getYear() + 1900; 
};

Der Javascript-Prototyp kann verwendet werden, um vorhandene Objekte zu erweitern, ähnlich wie C#-Erweiterungsmethoden. Jetzt können wir das einfach tun;

var myDate = new Date();
myDate.getRealYear();
// Outputs 2008

  • Vielleicht etwas wie Date.prototype.getRealYear = Date.prototype.getFullYear ? Date.prototype.getFullYear : function() { return this.getYear() + 1900; };

    – Valentin Golev

    25. November 09 um 14:43 Uhr

Überprüfen Sie die Dokumente. Es ist kein Jahr-2000-Problem – es ist das Fehlen eines Jahr-2000-Problems! Diese Entscheidung wurde ursprünglich in C getroffen und in Perl kopiert, anscheinend in JavaScript und wahrscheinlich in mehrere andere Sprachen. Vor so langer Zeit wurde es anscheinend noch als wünschenswert empfunden, zweistellige Jahreszahlen zu verwenden, aber bemerkenswerterweise hatte derjenige, der diese Schnittstelle entworfen hat, genug Voraussicht, um zu erkennen, dass er darüber nachdenken musste, was im Jahr 2000 und darüber hinaus passieren würde, also anstatt nur die letzten beiden bereitzustellen Ziffern, sie gaben die Anzahl der Jahre seit 1900 an. Sie konnten die zwei Ziffern verwenden, wenn Sie es eilig hatten oder riskant sein wollten. Oder wenn Sie möchten, dass Ihr Programm weiterhin funktioniert, können Sie 100 zum Ergebnis hinzufügen und vollwertige vierstellige Jahreszahlen verwenden.

Ich erinnere mich an das erste Mal, als ich Datumsmanipulationen in Perl durchführte. Seltsamerweise ich Lesen Sie die Dokumente. Anscheinend ist dies nicht üblich. Ein oder zwei Jahre später wurde ich am 31. Dezember 1999 ins Büro gerufen, um einen Fehler zu beheben, der in letzter Minute in einem Perl-Vertragscode entdeckt worden war, Dinge, mit denen ich nie etwas zu tun hatte. Es war genau dieses Problem: Der Standard-Datumsaufruf gab Jahre seit 1900 zurück, und die Programmierer behandelten es als zweistellige Jahreszahl. (Sie gingen davon aus, dass sie im Jahr 2000 “00” bekommen würden.) Als junger, unerfahrener Programmierer war ich verblüfft, dass wir für einen “professionellen” Job so viel extra bezahlt hatten und diese Leute sich nicht einmal die Mühe gemacht hatten, die zu lesen Dokumentation. Es war der Beginn vieler Jahre der Ernüchterung; jetzt bin ich alt und zynisch. 🙂

Im Jahr 2000 wurde die jährliche YAPC-Perl-Konferenz zu Ehren dieses oft gemeldeten Nicht-Bugs als “YAPC 19100” bezeichnet.

Heutzutage ist es zumindest in der Perl-Welt sinnvoller, ein Standardmodul für die Datumsverwaltung zu verwenden, das echte vierstellige Jahreszahlen verwendet. Nicht sicher, was für JavaScript verfügbar sein könnte.

  • hehe… erinnert mich an den Dilbert Cartoon… “Hast du die Geschichte über einen Spanier namens Manual gelesen?” 😉

    – Adhip Gupta

    20. September 2008 um 21:54 Uhr

  • Ich glaube, @skiphoppy bedeutete, dass das Hinzufügen von 1900 zu getYear() das gewünschte volle Jahr ergeben würde. Es ist vergleichbar mit dem Hinzufügen von +1 zu getMonth() beim Abrufen der für Menschen lesbaren Zahl des Monats. Beispiel: var ts = new Date(); var fullYear = (ts.getYear()+1900); Die Verwendung von getFullYear() wird jedoch bevorzugt. Beispiel: var fullYear = new Date().getFullYear();

    – Rückfall

    18. Mai 18 um 13:14 Uhr


Es muss die Anzahl der Jahre seit dem Jahr 1900 zurückgeben.

Warum gibt Javascript getYear 108 zuruck
Dan

benutzen date.getFullYear().

Dies ist (wie an anderer Stelle richtig ausgeführt) eine Y2K-Sache. Netscape (geschrieben vor 2000) kehrte zum Beispiel ursprünglich zurück 98 von getYear(). Anstatt zurückzukehren 00, es kehrte stattdessen zurück 100 für das Jahr 2000. Dann kamen andere Browser und machten es anders, und alle waren unglücklich, als die Inkompatibilität regierte.

Spätere Browser werden unterstützt getFullYear als Standardmethode, um das komplette Jahr zurückzugeben.

1643036717 208 Warum gibt Javascript getYear 108 zuruck
jjohn

Diese Frage ist so alt, dass ich vor Nostalgie für die Dotcom-Tage weinen muss!

Richtig, Date.getYear() gibt die Anzahl der Jahre seit 1900 zurück, genau wie Perls localtime(). Man fragt sich, warum eine Sprache, die in den 1990er Jahren entworfen wurde, den Jahrhundertwechsel nicht erklären würde, aber was soll ich sagen? Du musstest da sein. Es machte damals irgendwie Sinn (wie es pets.com tat).

Vor 2000 war man vielleicht versucht, diesen Fehler zu beheben, indem man “19” an das Ergebnis von getYear() anhängte, was zu dem führte “Jahr 19100 Fehler”. Andere haben diese Frage bereits ausreichend beantwortet (addiere 1900 zum Ergebnis von getDate()).

Vielleicht ist das Buch, das Sie gerade über JavaScript lesen, etwas alt?

Danke für die Explosion aus der Vergangenheit!

Sie sollten, wie bereits erwähnt, niemals verwenden getYear(), sondern verwenden getFullYear().

Die Geschichte ist jedoch nicht so einfach wie “IE implementiert GetYear() wie getFullYear(). Opera und IE behandeln diese Tage getYear() wie getYear() wurde ursprünglich für Daten vor 2000 angegeben, wird aber so behandelt getFullYear() für Daten nach 2000, während Webkit und Firefox beim alten Verhalten bleiben

Dies gibt 99 in allen Browsern aus:

javascript:alert(new Date(917823600000).getYear());

Dies gibt 108 in FF/WebKit und 2008 in Opera/IE aus:

javascript:alert(new Date().getYear());

.

619590cookie-checkWarum gibt Javascript getYear() 108 zurück?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy