Warum gibt dieses Javascript 108 statt 2008 zurück? es wird der Tag und der Monat richtig, aber nicht das Jahr?
myDate = new Date();
year = myDate.getYear();
Jahr = 108?
javascript
date
ctrlShiftBryan
quelle
quelle
year = myDate.getFullYear() % 100;
Antworten:
Es ist eine Y2K- Sache, nur die Jahre seit 1900 werden gezählt.
Es gibt jetzt potenzielle Kompatibilitätsprobleme,
getYear()
die zugunsten vongetFullYear()
- from quirksmode :Es gibt auch Implementierungsunterschiede zwischen Internet Explorer und Firefox, da die Implementierung von IE
getYear()
geändert wurde, um sich wie folgt zu verhaltengetFullYear()
- von IBM :quelle
Da getFullYear in älteren Browsern nicht funktioniert, können Sie Folgendes verwenden:
Der Javascript-Prototyp kann verwendet werden, um vorhandene Objekte zu erweitern, ähnlich wie bei C # -Erweiterungsmethoden. Jetzt können wir das einfach tun;
quelle
Überprüfen Sie die Dokumente. Es ist kein Y2K-Problem - es fehlt ein Y2K-Problem! Diese Entscheidung wurde ursprünglich in C getroffen und in Perl, anscheinend JavaScript, und wahrscheinlich in mehrere andere Sprachen kopiert. Vor langer Zeit schien es anscheinend immer noch wünschenswert, zweistellige Jahre zu verwenden, aber bemerkenswerterweise hatte jeder, der diese Schnittstelle entworfen hatte, genug Voraussicht, um zu erkennen, dass er darüber nachdenken musste, was im Jahr 2000 und darüber hinaus passieren würde, anstatt nur die letzten beiden bereitzustellen Ziffern, sie gaben die Anzahl der Jahre seit 1900 an. Sie können die beiden Ziffern verwenden, wenn Sie es eilig haben oder riskant sein möchten. Wenn Sie möchten, dass Ihr Programm weiterhin funktioniert, können Sie dem Ergebnis 100 hinzufügen und vollwertige vierstellige Jahre verwenden.
Ich erinnere mich an das erste Mal, als ich in Perl eine Datumsmanipulation durchgeführt habe. Seltsamerweise habe ich die Dokumente gelesen . Anscheinend ist dies keine alltägliche Sache. 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, mit dem ich nie etwas zu tun hatte. Es war genau dieses Problem: Der Standard-Datumsaufruf gab Jahre seit 1900 zurück, und die Programmierer behandelten ihn als zweistelliges Jahr. (Sie gingen davon aus, dass sie im Jahr 2000 "00" bekommen würden.) Als junger unerfahrener Programmierer hat es mich umgehauen, dass wir für einen "professionellen" Job so viel extra bezahlt hatten, und diese Leute hatten sich nicht einmal die Mühe gemacht, das 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-Fehlers als "YAPC 19100" bezeichnet.
Zumindest in der Perl-Welt ist es heutzutage sinnvoller, ein Standardmodul für die Datumsverarbeitung zu verwenden, das echte vierstellige Jahre verwendet. Nicht sicher, was für JavaScript verfügbar sein könnte.
quelle
Es muss die Anzahl der Jahre seit dem Jahr 1900 zurückgeben.
quelle
verwenden
date.getFullYear()
.Dies ist (wie an anderer Stelle richtig ausgeführt) eine Y2K-Sache. Netscape (geschrieben vor 2000) kehrte ursprünglich zurück, zum Beispiel
98
vongetYear()
. Anstatt zurückzukehren,00
kehrte es stattdessen100
für das Jahr 2000 zurück. Dann kamen andere Browser und machten es anders, und alle waren unglücklich, als Inkompatibilität herrschte.Spätere Browser werden
getFullYear
als Standardmethode unterstützt, um das gesamte Jahr zurückzugeben.quelle
Diese Frage ist so alt, dass ich vor Nostalgie über 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 in den 1990er Jahren entworfene Sprache nicht den Umsatz des Jahrhunderts ausmachen würde, aber was kann ich sagen? Du musstest da sein. Es machte damals eine Art Sinn (wie es Pets.com tat).
Vor 2000 könnte man versucht gewesen sein, diesen Fehler zu beheben, indem man "19" an das Ergebnis von getYear () anhängt, was zum "Jahr 19100-Fehler" führt . Andere haben diese Frage bereits ausreichend beantwortet (fügen Sie 1900 zum Ergebnis von getDate () hinzu).
Vielleicht ist das Buch, das Sie über JavaScript lesen, etwas alt?
Danke für die Explosion aus der Vergangenheit!
quelle
Sie sollten, wie bereits erwähnt, niemals verwenden
getYear()
, sondern verwendengetFullYear()
.Die Geschichte ist jedoch nicht so einfach wie "IE implementiert
GetYear()
alsgetFullYear()
. Opera und IE behandeln heutzutagegetYear()
wiegetYear()
ursprünglich für Daten vor 2000 angegeben, behandeln sie jedoch wiegetFullYear()
für Daten nach 2000, während Webkit und Firefox am alten Verhalten festhaltenDies gibt 99 in allen Browsern aus:
Dies gibt 108 in FF / WebKit und 2008 in Opera / IE aus:
quelle
Es ist dumm. Es stammt aus der Zeit vor dem Jahr 2000 und gibt aus alten Gründen nur noch die Anzahl der Jahre seit 1900 zurück. Verwenden Sie getFullYear (), um das aktuelle Jahr abzurufen.
quelle
Ich benutze
date.getUTCFullYear()
; ohne Probleme arbeiten.quelle
Die Zahl, die Sie erhalten, ist die Anzahl der Jahre seit 1900. Fragen Sie mich nicht warum ..
quelle
Wie andere gesagt haben, gibt es die Anzahl der Jahre seit 1900. Der Grund , warum es tut , dass ist , dass , wenn Sie in der Mitte der 90er Jahre erfunden wurde, das Verhalten sowohl bequem und im Einklang mit Datum-Zeit - APIs in anderen Sprachen war. Insbesondere C. Und natürlich konnten sie die API nach ihrer Einrichtung aus Gründen der Abwärtskompatibilität nicht mehr ändern.
quelle
Übrigens können verschiedene Browser unterschiedliche Ergebnisse zurückgeben. Es ist daher besser, diese Funktion insgesamt zu überspringen und getFullYear () immer zu verwenden.
quelle
var date_object = new Date (); var year = date_object.getYear (); if (Jahr <2000) {Jahr = Jahr + 1900; } // du bekommst das ganze Jahr ....
quelle
es kehrt 4-stelliges Jahr zurück - 1900, das vor mehr als 9 Jahren cool gewesen sein mag, aber jetzt ziemlich zurückgeblieben ist. Javas java.util.Date macht das auch.
quelle