Quiz: 14 Fragen zu JavaScript-Dates
Lerne, auf Partys mit JS-Trivia zu beeindrucken! ✨
Wie gut kennen Sie die Date-Klasse?
- Beweisen Sie Ihre JavaScript-Skills! 🚀
- Kein Login oder Registrierung erforderlich. ✨
- Multiple Choice. 🤖 … Wie schwer kann das schon sein, oder?
Überblick
Die Date-Klasse in JavaScript hat eine notorisch schwierige API. Sie wurde von Java übernommen und, so meine Vermutung, von neolithischen Zeitmessungsmethoden inspiriert.
Der Kampf mit Date führt dazu, dass viele Entwickler ungefragt auf Drittanbieter-Bibliotheken zurückgreifen. Das ist zwar oft eine sichere und zuverlässige Wahl, aber für die Formatierung von Daten oder Lokalisierung sind diese Bibliotheken selten wirklich notwendig!
Dieses Quiz soll Ihr Wissen über die native Date-API testen (und vertiefen). Nutzen Sie die grünen Buttons für Hinweise und Erklärungen! Hoffentlich haben Sie am Ende der Challenge Ihr Verständnis von Date in JavaScript gefestigt.
HINWEIS: Gehen Sie bei allen Beispielen von der lokalen Zeitzone GMT-7 aus.
👇 14 Fragen unterhalb 👇
Was wird die Ausgabe enthalten?
const d1 = new Date(2020, 1, 1)console.log(d1)Das Monats-Argument ist nullbasiert, mit einem Bereich von 0-11 (bei Verwendung westlicher Kalender).
‘Februar’ hat den Indexwert eins. (Stell es dir wie ein Array-Lookup vor.)
Was wird die Ausgabe enthalten?
const d2 = new Date(2020, 0, 1)console.log(d2)Das Argument für den Monat ist nullbasiert, mit einem Bereich von 0-11 (bei Verwendung des westlichen Kalenders).
‘Januar’ hat den Indexwert Null. (Stell es dir wie einen Array-Lookup vor.)
Was wird die Ausgabe enthalten?
const d3 = Date('Thu, 01 Jan 1970 00:00:00 GMT')console.log(d3)Vergiss nicht das new-Schlüsselwort! Date ist eine Klasse und sollte mit new aufgerufen werden.
Date('...') ohne new ignoriert die übergebenen Argumente. Es scheint immer das aktuelle Datum und die Uhrzeit auszugeben, ähnlich wie new Date() (ohne Argumente).
Das ist ein häufiger Fallstrick, der selbst bei einem Code-Review leicht zu übersehen ist.
Was wird die Ausgabe enthalten?
const date = new Date(2020)console.log(date.getFullYear())Eine Date-Instanz, die mit einem einzelnen Integer-Argument erstellt wird, wird als Unix-Epoch-Wert interpretiert. Die Epoch ist die Anzahl der Millisekunden seit dem 1. Januar 1970.
Ein Wert von 2020 (Millisekunden) entspricht 2 Sekunden nach dem 1. Januar 1970.
Da unsere lokale Zeitzone jedoch einen negativen Offset von -7 Stunden hat, landen wir bei Wed Dec 31 1969 17:00:02 GMT-0700 (Mountain Standard Time).
Du kannst den lokalen Zeitzonen-Offset umgehen, indem du .getUTCFullYear() verwendest.
Welcher Wert wird in der Konsole ausgegeben?
const d1 = new Date('2020-01-01')const d2 = new Date('2020-01-01T00:00')console.log(d1.getFullYear(), d2.getFullYear())Ein String ohne einen T-Zeitwert mag wie der 1. Januar 2020 erscheinen – aber reine Datums-Strings werden als UTC interpretiert. Wenn wir dies an unsere lokale Zeitzone (GMT-7) anpassen, befinden wir uns tatsächlich noch im Jahr 2019.
Datum-Zeit-Strings ohne explizite Zeitzone werden hingegen in der lokalen Zeit interpretiert.
Das Format T00:00 bewirkt, dass der zweite Wert als lokale Mitternacht interpretiert wird.
Das erste Datum wird als Tue Dec 31 2019 17:00:00 GMT-0700 (Mountain Standard Time) interpretiert.
Das zweite Datum wird als Wed Jan 01 2020 00:00:00 GMT-0700 (Mountain Standard Time) interpretiert.
Wähle eine falsche Formatierungsmethode aus:
Die Methode toLocaleFormat() ist kein Standard! Sie kommt dir vielleicht bekannt vor, da sie aus einer uralten Drittanbieter-Bibliothek stammt.
Schau dir die Dokumentation zur Methode toLocaleDateString an. Ihr Verhalten ist unter Intl.DateTimeFormat dokumentiert.
Was wird die Ausgabe enthalten?
var date = Date.UTC('2020-01-02T00:00')console.log(date.toUTCString())Du erhältst einen TypeError: date.toUTCString is not a function, da Date.UTC() eine Ganzzahl in Millisekunden zurückgibt und keine Date-Instanz.
Was wird die Ausgabe enthalten?
const d = Date.UTC(2020, 0, 1)console.log(d)Die Hilfsmethode Date.UTC gibt keine Date-Instanz zurück. Sie gibt eine Ganzzahl in Millisekunden zurück.
Was wird die Ausgabe enthalten?
// Assume local TZ is -07:00const d = new Date(Date.UTC(2020, 0, 1))console.log(d.getTimezoneOffset())Daten werden implizit in der lokalen Zeit dargestellt, mit einem (effektiv) unveränderlichen .getTimezoneOffset().
Date-Instanzen speichern keine Zeitzonendaten. Sie speichern die Anzahl der Millisekunden seit der Unix-Epoche (1. Januar 1970). Die Zeitzone wird beim Parsen und Rendern von Datums-Strings berücksichtigt. Das Standard-Anzeigeverhalten wird automatisch basierend auf den Gebietsschema-Einstellungen des Systems oder Browsers bestimmt.
Was wird die Ausgabe enthalten?
const d = new Date(2020, 0, 1)d.setDate(1)console.log(d)Die Methode .setDate() setzt den Tag des Monats, basierend auf dem aktuellen Monat der jeweiligen Instanz.
Wenn ein Wert außerhalb der verfügbaren Anzahl von Tagen angegeben wird, wird der Monatswert der Datumsinstanz angepasst (z. B. wird ein setDate(32) im Januar als 1. Februar berechnet).
Was wird die Ausgabe enthalten?
const d = new Date(2020, 0, 1)d.setMonth(1)console.log(d)Die Methode .setMonth() setzt den Monat für eine bestimmte Datumsinstanz.
Das Monatsargument ist nullbasiert, mit einem Bereich von 0-11 (bei Verwendung des westlichen Kalenders).
Was wird die Ausgabe enthalten?
const d = new Date(2020, 0, 1)d.setMonth(12)console.log(d)Die Methode .setMonth() setzt den Monat für eine gegebene Datumsinstanz.
Das month-Argument ist nullbasiert, mit 12 Werten im Bereich von 0-11 (bei Verwendung westlicher Kalender).
Hier sehen wir, dass das Jahr auf 2021 angepasst wird, da setMonth(12) um 1 höher ist als 11 (Dezember).
Was wird die Ausgabe enthalten?
const d = new Date(2020, 0, 1)d.setMonth(13)console.log(d)Die Methode .setMonth() setzt den Monat für eine bestimmte Datumsinstanz.
Das Monatsargument ist nullbasiert, mit einem Bereich von 0-11 (im westlichen Kalender).
Hier sehen wir, dass Monat und Jahr auf Februar 2021 angepasst werden, da setMonth(13) um 2 über dem Wert 11 (Dezember) liegt.
Was wird die Ausgabe enthalten?
const d = new Date(2020, 0, 1)d.setMonth(-1)console.log(d)Die Methode .setMonth() setzt den Monat für eine bestimmte Datumsinstanz.
Das Monatsargument ist nullbasiert und hat einen Bereich von 0-11 (im westlichen Kalender).
Hier sehen wir, dass Monat und Jahr auf Dezember 2019 zurückspringen, da setMonth(-1) kleiner als 0 (Januar) ist.