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

Temporal.ZonedDateTime.prototype.toInstant()

Methode

Gibt ein neues <code>Temporal.Instant</code> zurück, das genau den Zeitpunkt dieses <code>Temporal.ZonedDateTime</code> darstellt, aber ohne Zeitzone und ohne Kalender.

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

Signatur

Temporal.ZonedDateTime.prototype.toInstant()

Beschreibung

Die Methode toInstant() wandelt ein Temporal.ZonedDateTime in ein Temporal.Instant um. Ein ZonedDateTime besteht aus drei Teilen: einem exakten Zeitpunkt (Nanosekunden seit der Unix-Epoche), einer Zeitzone und einem Kalender. toInstant() behält nur den exakten Zeitpunkt und verwirft Zeitzone und Kalender.

Sinnvoll ist das immer dann, wenn nur der absolute Zeitpunkt zählt, etwa beim Speichern in einer Datenbank, beim Übertragen als UTC-Zeitstempel (...Z), beim Sortieren oder beim Vergleichen von Ereignissen aus verschiedenen Zeitzonen. Weil ein Instant keine Zeitzone hat, ist er als austauschbares, eindeutiges Datenformat gut geeignet.

Die Umwandlung verliert nichts an Genauigkeit: epochNanoseconds ist bei beiden Objekten gleich. Ist die ursprüngliche Zeitzone später wieder nötig, lässt sie sich mit instant.toZonedDateTimeISO(timeZone) erneut anwenden. Das ursprüngliche Objekt bleibt dabei unverändert, denn alle Temporal-Objekte sind unveränderlich.

Rückgabewert

Typ
Temporal.Instant
Beschreibung
Ein neues Temporal.Instant mit denselben epochNanoseconds wie dieses ZonedDateTime.

Beispiele

Grundlegende Umwandlung in einen UTC-Zeitpunkt

const zdt = Temporal.ZonedDateTime.from('2025-03-15T14:30:00+01:00[Europe/Berlin]');
const instant = zdt.toInstant();

console.log(instant.toString());
console.log(instant.epochMilliseconds);
2025-03-15T13:30:00Z 1742045400000

Termine aus verschiedenen Zeitzonen vergleichen und sortieren

const termine = [
  Temporal.ZonedDateTime.from('2025-06-01T09:00[America/New_York]'),
  Temporal.ZonedDateTime.from('2025-06-01T14:00[Europe/Berlin]'),
  Temporal.ZonedDateTime.from('2025-06-01T21:00[Asia/Tokyo]')
];

const sortiert = termine
  .map((z) => z.toInstant())
  .sort(Temporal.Instant.compare);

sortiert.forEach((i) => console.log(i.toString()));
2025-06-01T12:00:00Z 2025-06-01T12:00:00Z 2025-06-01T13:00:00Z

Zeitstempel für API/Datenbank speichern und wiederherstellen

const bestellung = Temporal.Now.zonedDateTimeISO('Europe/Vienna');

// Nur den absoluten Zeitpunkt speichern
const payload = JSON.stringify({ erstelltAm: bestellung.toInstant().toString() });

// Später: wieder in einer beliebigen Zeitzone darstellen
const { erstelltAm } = JSON.parse(payload);
const lokal = Temporal.Instant.from(erstelltAm).toZonedDateTimeISO('Europe/Vienna');

console.log(lokal.equals(bestellung.withCalendar('iso8601')));
true

// Wichtig · Fallstricke

  • Zeitzone und Kalender gehen verloren: Ein Instant kennt keine Zeitzone. Wer die Ortszeit später wieder braucht, muss den Zeitzonen-Bezeichner (z. B. zdt.timeZoneId) extra speichern.
  • Nicht mit toPlainDateTime() verwechseln: Diese Methode behält die Wanduhrzeit und verwirft den exakten Zeitpunkt, toInstant() macht es genau umgekehrt.
  • Zum reinen Vergleichen zweier ZonedDateTime braucht man toInstant() nicht unbedingt: Temporal.ZonedDateTime.compare() vergleicht ebenfalls den exakten Zeitpunkt. equals() prüft dagegen zusätzlich Zeitzone und Kalender.
  • Kompatibilität: Temporal ist ab Firefox 139 und Chrome 144 enthalten, Safari und ältere Node.js-Versionen unterstützen es noch nicht vollständig. Für den Produktiveinsatz einen Polyfill verwenden, z. B. @js-temporal/polyfill oder temporal-polyfill.
  • Für die Umwandlung in ein altes Date: new Date(zdt.toInstant().epochMilliseconds). Nanosekunden unterhalb einer Millisekunde werden dabei abgeschnitten.