Start · Sprachen · JavaScript · Referenz · Temporal.ZonedDateTime.prototype.toPlainDate()

Temporal.ZonedDateTime.prototype.toPlainDate()

Methode

Gibt ein neues <code>Temporal.PlainDate</code> mit dem Kalenderdatum (Jahr, Monat, Tag) dieses <code>ZonedDateTime</code> in seiner eigenen Zeitzone zurück.

seit JavaScript ES2026 (Temporal); Firefox 139+, Chrome 144+; Safa Kategorie: method-property

Signatur

Temporal.ZonedDateTime.prototype.toPlainDate()

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

Typ
Temporal.PlainDate
Beschreibung
Ein neues 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);
2024-03-15 2024 3 15 true

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
2025-01-01 2024-12-31

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);
}
2024-05-01 2 2024-05-02 1

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');
Termin ist nicht heute (abhängig vom aktuellen Datum)

// Wichtig · Fallstricke

  • Zeitzonen- und Uhrzeitinformation gehen verloren: Ein PlainDate steht für keinen eindeutigen Zeitpunkt mehr. Wer später wieder ein ZonedDateTime braucht, muss mit plainDate.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 mit equals() oder Temporal.PlainDate.compare().
  • Kalender: Hat das ZonedDateTime einen anderen Kalender als ISO, gilt dieser auch für das Ergebnis. year, month usw. 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/polyfill oder temporal-polyfill verwenden.
  • Ältere Entwürfe des Proposals kannten auch toPlainYearMonth() und toPlainMonthDay() direkt an ZonedDateTime. Heute führt der Weg über toPlainDate().toPlainYearMonth() bzw. toPlainDate().toPlainMonthDay().