DanLevy.net

Quiz: 14 Fragen zu JavaScript-Dates

Lerne, auf Partys mit JS-Trivia zu beeindrucken! ✨

Hero image for Quiz: 14 Fragen zu JavaScript-Dates

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 👇


Welches lokale Kalenderdatum stellt das Ergebnis dar? Die genaue Konsolendarstellung hängt von der Laufzeit ab.

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.)

Welches lokale Kalenderdatum stellt das Ergebnis dar? Die genaue Konsolendarstellung hängt von der Laufzeit ab.

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)

Date(...) ohne new ist ein Funktionsaufruf. Er ignoriert alle Argumente und gibt einen String mit dem aktuellen Datum und der aktuellen Uhrzeit zurück. new Date(...) erzeugt dagegen ein Date-Objekt und verarbeitet seine Argumente. Dieser Unterschied ist leicht zu übersehen.

Nimm für diese Frage einen lokalen Zeitzonenoffset von GMT−07:00 an. 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.

Nimm für diese Frage einen lokalen Zeitzonenoffset von GMT−07:00 an. 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() gehört nicht zum ECMAScript-Standard. Verwende für portablen Code eine standardisierte Formatierungsmethode wie toLocaleDateString() oder toLocaleString().

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())

Date.UTC("2020-01-01") versucht, den String als numerisches Jahr umzuwandeln, und liefert hier NaN. Date.UTC gibt eine Zahl zurück, kein Date-Objekt. Deshalb schlägt der anschließende Aufruf .toUTCString() mit einem TypeError fehl.

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.

Nimm für diese Frage einen lokalen Zeitzonenoffset von GMT−07:00 an. Was wird die Ausgabe enthalten?

// Assume local TZ is -07:00
const d = new Date(Date.UTC(2020, 0, 1))
console.log(d.getTimezoneOffset())

getTimezoneOffset() liefert UTC minus lokale Zeit in Minuten. Bei GMT−07:00 sind das 420. Ein Date-Objekt speichert einen Zeitpunkt als Millisekunden seit der Unix-Epoche, keine Zeitzone. Der Offset hängt von der Systemzeitzone und dem jeweiligen Datum ab und kann sich etwa durch Sommerzeit ändern.

Welches lokale Kalenderdatum stellt das Ergebnis dar? Die genaue Konsolendarstellung hängt von der Laufzeit ab.

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).

Welches lokale Kalenderdatum stellt das Ergebnis dar? Die genaue Konsolendarstellung hängt von der Laufzeit ab.

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).

Welches lokale Kalenderdatum stellt das Ergebnis dar? Die genaue Konsolendarstellung hängt von der Laufzeit ab.

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).

Welches lokale Kalenderdatum stellt das Ergebnis dar? Die genaue Konsolendarstellung hängt von der Laufzeit ab.

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.

Welches lokale Kalenderdatum stellt das Ergebnis dar? Die genaue Konsolendarstellung hängt von der Laufzeit ab.

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.