Start · Sprachen · JavaScript · Referenz · Temporal.ZonedDateTime.prototype.epochMilliseconds

Temporal.ZonedDateTime.prototype.epochMilliseconds

Eigenschaft

Gibt die Anzahl der Millisekunden seit der Unix-Epoche (1970-01-01T00:00:00Z) für den exakten Zeitpunkt eines <code>Temporal.ZonedDateTime</code> als ganze Zahl zurück.

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

Signatur

get Temporal.ZonedDateTime.prototype.epochMilliseconds

Beschreibung

Die Zugriffseigenschaft epochMilliseconds liefert den exakten Zeitpunkt eines Temporal.ZonedDateTime als ganzzahlige Millisekundenzahl seit der Unix-Epoche (Mitternacht zu Beginn des 1. Januar 1970, UTC). Der Wert hängt nur vom Zeitpunkt ab, nicht von der Zeitzone oder dem Kalender: Zwei Objekte, die denselben Moment in Berlin und in Tokio darstellen, haben denselben Wert für epochMilliseconds.

Wofür braucht man das? Vor allem für die Zusammenarbeit mit Code, der Zeitstempel erwartet, etwa Date (new Date(ms)), Date.now()-Vergleiche, JSON-APIs, Datenbanken oder localStorage, die Unix-Zeitstempel in Millisekunden speichern. Mit Temporal.Instant.fromEpochMilliseconds() und toZonedDateTimeISO() geht es in die umgekehrte Richtung.

Intern speichert Temporal Zeitpunkte mit Nanosekunden-Genauigkeit. epochMilliseconds entspricht epochNanoseconds / 1_000_000, abgerundet (in Richtung minus unendlich). Die Nachkommastellen unterhalb einer Millisekunde gehen also verloren. Wer die volle Genauigkeit braucht, nimmt epochNanoseconds (ein BigInt).

Die Eigenschaft ist nur lesbar. Es gibt keinen Setter, denn Temporal-Objekte sind unveränderlich. Einen anderen Zeitpunkt erzeugt man mit add(), subtract(), with() oder über ein neues Instant.

Rückgabewert

Typ
number
Beschreibung
Ganze Zahl: die Millisekunden seit 1970-01-01T00:00:00Z. Zeitpunkte vor der Epoche ergeben negative Werte. Der Wert ist immer ein sicherer Integer, weil der Wertebereich von Temporal auf ±108 Tage begrenzt ist, also genau wie bei Date.

Beispiele

Zeitstempel eines Zeitpunkts in einer Zeitzone

const zdt = Temporal.ZonedDateTime.from("2024-01-01T00:00:00+01:00[Europe/Berlin]");

console.log(zdt.epochMilliseconds);
// Gleicher Moment in UTC: 2023-12-31T23:00:00Z
console.log(zdt.toInstant().toString());
1704063600000 2023-12-31T23:00:00Z

Unabhängig von der Zeitzone

const berlin = Temporal.ZonedDateTime.from("2024-06-15T12:00:00[Europe/Berlin]");
const tokio = berlin.withTimeZone("Asia/Tokyo");

console.log(tokio.toString());
console.log(berlin.epochMilliseconds === tokio.epochMilliseconds);
2024-06-15T19:00:00+09:00[Asia/Tokyo] true

Brücke zu Date und zurück

// Temporal → Date (z. B. für eine ältere Bibliothek)
const termin = Temporal.ZonedDateTime.from("2025-03-30T09:30:00[Europe/Berlin]");
const date = new Date(termin.epochMilliseconds);
console.log(date.toISOString());

// Zeitstempel aus einer API → ZonedDateTime
const apiTimestamp = 1743319800000;
const zurueck = Temporal.Instant
  .fromEpochMilliseconds(apiTimestamp)
  .toZonedDateTimeISO("Europe/Berlin");
console.log(zurueck.toString());
2025-03-30T07:30:00.000Z 2025-03-30T09:30:00+02:00[Europe/Berlin]

Abrunden bei Zeitpunkten vor 1970

const zdt = Temporal.ZonedDateTime.from("1969-12-31T23:59:59.9995+00:00[UTC]");

console.log(zdt.epochNanoseconds);  // volle Genauigkeit
console.log(zdt.epochMilliseconds); // abgerundet, nicht in Richtung 0 abgeschnitten
-500000n -1

// Wichtig · Fallstricke

  • Genauigkeit geht verloren: Mikro- und Nanosekunden werden abgerundet (Math.floor-Verhalten, auch bei negativen Werten). Das Hin- und Zurückwandeln über Millisekunden ist daher nicht verlustfrei. Für exakte Vergleiche solltest du epochNanoseconds oder Temporal.ZonedDateTime.compare() verwenden.
  • Nicht mit Sekunden verwechseln: Viele Backends (Unix-time(), JWT-exp) arbeiten mit Sekunden. Teile dann durch 1000 und runde bewusst, z. B. mit Math.floor(zdt.epochMilliseconds / 1000). Eine eigene Eigenschaft epochSeconds gab es nur in frühen Entwürfen, sie wurde entfernt.
  • Zeitzone und Kalender fehlen im Wert: Aus der Zahl allein kannst du das ursprüngliche ZonedDateTime nicht wiederherstellen. Wenn die Zeitzone wichtig ist, speichere toString() (z. B. …+01:00[Europe/Berlin]).
  • Kompatibilität: Temporal ist in Firefox (ab 139) und in Chromium-Browsern (ab 144) verfügbar, in Safari und älteren Node.js-Versionen noch nicht. Als Ersatz gibt es z. B. den Polyfill @js-temporal/polyfill. Prüfe die Unterstützung mit typeof Temporal !== \"undefined\".