Frage

Warum gibt diese Javascript 108 statt 2008? es wird den Tag und Monat korrekt, aber nicht das Jahr?

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

year = 108?

War es hilfreich?

Lösung

Es ist eine Y2K Sache, nur die Jahre seit 1900 gezählt werden.

Es gibt mögliche Kompatibilitätsprobleme jetzt, dass getYear() hat sich für getFullYear() veraltet - von Quirksmode :

  

Um die Sache noch komplizierter zu machen, Date.getYear () wird heute als veraltet und Sie sollten Date.getFullYear () verwenden, was wiederum wird nicht von den älteren Browsern unterstützt. Wenn es funktioniert, aber es sollte immer das Gesamtjahr geben, das heißt. statt 2000 von 100.

     

Ihr Browser gibt die folgenden Jahre mit diesen beiden Methoden:

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

Es gibt auch Implementierung Unterschiede zwischen Internet Explorer und Firefox, als IE-Implementierung von getYear() geändert wurde wie getFullYear() zu verhalten - von IBM :

  

Per der ECMAScript-Spezifikation, getYear kehrt das Jahr minus 1900 bedeutete ursprünglich "98" zurückzukehren für 1998 getYear in ECMAScript Version veraltet wurden 3 und ersetzt mit getFullYear ().

     

Internet Explorer geändert getYear () wie getFullYear zu arbeiten () und es Y2k-konform zu machen, während Mozilla das Standardverhalten beibehalten.

Andere Tipps

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

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

kann Javascript Prototyp verwendet werden, um bestehende Objekte zu erweitern, ähnlich wie C # Erweiterungsmethoden. Jetzt können wir dies nur tun;

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

Überprüfen Sie die Dokumentation. Es ist kein Y2K Problem - es ist ein Mangel an Y2K Problem! Diese Entscheidung wurde ursprünglich in C hergestellt und wurde in Perl kopiert, anscheinend JavaScript und wahrscheinlich einige andere Sprachen. Dass vor langer Zeit war es offenbar fühlte sich immer noch wünschenswert zweistellige Jahre zu verwenden, aber bemerkenswert, wer gestaltet, dass Schnittstelle hatte genug Vorbedacht zu erkennen, dass sie gebraucht, um darüber nachzudenken, was im Jahr 2000 und darüber hinaus, so anstatt nur die Bereitstellung der beiden letzten passieren würde Ziffern, sie vorgesehen, um die Anzahl der Jahre seit 1900. Sie die beiden Ziffern verwenden können, wenn Sie in Eile waren oder wollten riskant. Oder wenn Sie Ihr Programm will Arbeit fortzusetzen, könnte man 100 hinzufügen, um das Ergebnis und nutzt vollwertiges vierstellige Jahre.

Ich erinnere mich an das erste Mal, dass ich Datum Manipulation in Perl hat. Merkwürdigerweise I Lesen Sie die Dokumentation . Offensichtlich ist dies nicht eine gemeinsame Sache. Ein oder zwei Jahre später wurde ich in das Büro am 31. Dezember rief 1999 einen Fehler zu beheben, die im allerletzten Minute in einigen Vertrag Perl-Code, Material entdeckt worden war würde ich nie etwas mit dem zu tun hatte. Es war genau dieses Problem: der Standard-Datum Anruf seit 1900 zurück Jahren, und die Programmierer behandelten es als eine zweistellige Jahreszahl. (Sie nahmen an, sie würden „00“ im Jahr 2000 erhalten) Als jungen unerfahrenen Programmierer, es hat mich sehr beeindruckt, dass wir so viel mehr für einen „Profi“ Job bezahlt hatten, und die Leute hatten nicht einmal die Mühe gemacht, die lesen Dokumentation. Es war der Anfang von vielen Jahren der Enttäuschung; jetzt bin ich alt und zynisch. :)

Im Jahr 2000 wird die jährliche YAPC Perl Konferenz wurde als „YAPC 19100“ bezeichnet zu Ehren dieser oft berichtete nicht-Fehler.

Heute in der Perl-Welt zumindest, macht es mehr Sinn, ein Standardmodul für Datum-Handhabung zu verwenden, eine, die realen vierstellige Jahre verwendet. Nicht sicher, was für JavaScript zur Verfügung.

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

Verwendung date.getFullYear().

Dies ist (wie Recht darauf hingewiesen, an anderer Stelle) ist eine Y2K Sache. Netscape (geschrieben vor 2000) ursprünglich zurückgekehrt, zum Beispiel 98 von getYear(). Anstatt Rückkehr zu 00, kehrte er stattdessen 100 für das Jahr 2000. Dann andere Browser kamen und tat es anders, und jeder war unglücklich, wie Unverträglichkeit herrschte.

Später Browsern unterstützt getFullYear als Standardmethode das gesamte Jahr zurückzukehren.

Diese Frage ist so alt, dass sie mich mit Sehnsucht nach den Dotcom-Tage weinen macht!

Das ist richtig, Date.getYear () seit dem Jahr 1900 die Anzahl der Jahre zurück, genau wie Perl localtime (). Man fragt sich, warum die Sprache in den 1990er Jahren entwickelt, nicht für das Jahrhundert Umsatzes ausmachen, aber was soll ich sagen? Sie haben dort zu sein. Es machte irgendwie eine Art von Sinn zu der Zeit (wie pets.com tat).

Vor dem Jahr 2000, könnte man diesen Fehler zu beheben, indem anhängen „19“ auf das Ergebnis der getYear (), die sie in dem "Jahr 19100 bug" . Andere haben diese Frage bereits ausreichend beantwortet (add 1900 auf das Ergebnis des getDate ()).

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

Danke für die Explosion von der Vergangenheit!

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

Die Geschichte jedoch nicht so einfach, wie „IE implementiert GetYear() als getFullYear(). Opera und IE in diesen Tagen behandeln getYear() als getYear() ursprünglich für Termine vor dem Jahr 2000 festgelegt wurde, aber wird es als getFullYear() für Termine nach 2000 behandeln, während WebKit und Firefox Stick mit dem alten Verhalten

Das gibt 99 in allen Browsern:

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

Diese Ausgänge 108 in FF / WebKit, und 2008 in Opera / IE:

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

Es ist dumm. Es Termine vorab Y2K Tage , und jetzt gibt nur die Anzahl der Jahre seit 1900 für Legacy-Gründe. Verwenden Sie getFullYear (), um das aktuelle Jahr zu bekommen.

Ich bin mit date.getUTCFullYear(); Arbeiten ohne Probleme.

Die Zahl, die Sie erhalten, ist die Anzahl der Jahre seit 1900. Fragen Sie mich nicht, warum ..

Wie andere gesagt haben, gibt es die Anzahl der Jahre seit 1900. Der Grund, warum es tut , die ist, dass, wenn Sie in der Mitte der 90er Jahre erfunden wurde, war das Verhalten sowohl bequem und im Einklang mit Datum-Zeit-APIs in anderen Sprachen. Besonders C. Und natürlich, sobald die API gegründet wurde sie es nicht für die Abwärtskompatibilität Gründe ändern könnte.

BTW, verschiedener Browser möglicherweise unterschiedliche Ergebnisse angezeigt, so ist es besser, diese Funktion ganz überspringen und verwendet getFullYear () immer.

var date_object = new Date (); var year = date_object.getYear (); if (Jahr <2000) {     Jahr = Jahr + 1900; } // u wird das ganze Jahr erhalten ....

es kehrt 4-stelliges Jahr - 1900, die vor 9+ Jahren kühl gewesen sein mögen, aber es ist ziemlich jetzt verzögert. Java java.util.Date auch tut dies.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top