Signatur
Beschreibung
Die Methode toPlainDate() nimmt aus einem Temporal.ZonedDateTime nur den Datumsanteil heraus. Das Ergebnis ist ein Temporal.PlainDate ohne Uhrzeit und ohne Zeitzone. Jahr, Monat und Tag entsprechen dabei dem Wanduhrdatum in der Zeitzone des Objekts, nicht dem UTC-Datum.
Das ist praktisch, wenn ein Zeitpunkt zwar zeitzonenbewusst gespeichert ist, man für die Weiterverarbeitung aber nur den Kalendertag braucht, etwa zum Gruppieren von Ereignissen nach Tag, für Geburtstage oder Fälligkeitsdaten, zum Vergleichen mit anderen reinen Datumswerten oder für Datumsauswahlfelder (<input type="date">).
Das Kalendersystem (z. B. iso8601, japanese) wird in das neue PlainDate übernommen. Das ursprüngliche Objekt bleibt unverändert, denn alle Temporal-Objekte sind unveränderlich.
Rückgabewert
Temporal.PlainDate mit Jahr, Monat und Tag dieses Objekts in seiner Zeitzone und mit demselben Kalender.Beispiele
Datumsanteil herauslösen
const zdt = Temporal.ZonedDateTime.from('2024-03-15T14:30:00+01:00[Europe/Berlin]');
const datum = zdt.toPlainDate();
console.log(datum.toString());
console.log(datum.year, datum.month, datum.day);
console.log(datum instanceof Temporal.PlainDate);
Die Zeitzone bestimmt das Datum
const instant = Temporal.Instant.from('2024-12-31T23:30:00Z');
const berlin = instant.toZonedDateTimeISO('Europe/Berlin').toPlainDate();
const newYork = instant.toZonedDateTimeISO('America/New_York').toPlainDate();
console.log(berlin.toString()); // in Berlin schon Neujahr
console.log(newYork.toString()); // in New York noch Silvester
Ereignisse nach Kalendertag gruppieren
const ereignisse = [
'2024-05-01T08:15:00+02:00[Europe/Berlin]',
'2024-05-01T22:45:00+02:00[Europe/Berlin]',
'2024-05-02T09:00:00+02:00[Europe/Berlin]'
].map((s) => Temporal.ZonedDateTime.from(s));
const proTag = Map.groupBy(ereignisse, (e) => e.toPlainDate().toString());
for (const [tag, liste] of proTag) {
console.log(tag, liste.length);
}
Prüfen, ob ein Termin heute ist
const termin = Temporal.ZonedDateTime.from('2024-06-10T16:00:00+02:00[Europe/Berlin]');
const heute = Temporal.Now.plainDateISO('Europe/Berlin');
const istHeute = Temporal.PlainDate.compare(termin.toPlainDate(), heute) === 0;
// alternativ: termin.toPlainDate().equals(heute)
console.log(istHeute ? 'Termin ist heute' : 'Termin ist nicht heute');
// Wichtig · Fallstricke
- Zeitzonen- und Uhrzeitinformation gehen verloren: Ein
PlainDatesteht für keinen eindeutigen Zeitpunkt mehr. Wer später wieder einZonedDateTimebraucht, muss mitplainDate.toZonedDateTime({ timeZone, plainTime })Zeitzone und ggf. Uhrzeit neu angeben. - Nicht mit dem UTC-Datum verwechseln: Das Datum stammt aus der Wanduhrzeit der gespeicherten Zeitzone. Für ein Datum in einer anderen Zone vorher
withTimeZone()aufrufen. - Vergleiche:
PlainDate-Objekte nicht mit===oder<vergleichen, sondern mitequals()oderTemporal.PlainDate.compare(). - Kalender: Hat das
ZonedDateTimeeinen anderen Kalender als ISO, gilt dieser auch für das Ergebnis.year,monthusw. können dann von den ISO-Werten abweichen. - Kompatibilität: Temporal ist neu und wird noch nicht überall unterstützt (Firefox 139+, Chrome/Edge 144+; Safari und ältere Node.js-Versionen nicht). Für den Einsatz in Produktion einen Polyfill wie
@js-temporal/polyfillodertemporal-polyfillverwenden. - Ältere Entwürfe des Proposals kannten auch
toPlainYearMonth()undtoPlainMonthDay()direkt anZonedDateTime. Heute führt der Weg übertoPlainDate().toPlainYearMonth()bzw.toPlainDate().toPlainMonthDay().