Signatur
Beschreibung
Die Accessor-Eigenschaft epochMilliseconds einer Temporal.Instant-Instanz liefert den Zeitpunkt als ganze Zahl von Millisekunden seit dem Unix-Epoch, also Mitternacht UTC am Anfang des 1. Januar 1970. Das ist genau das Format, das auch Date.now(), Date.prototype.getTime() und viele Datenbanken bzw. REST-APIs verwenden.
Intern speichert ein Temporal.Instant Nanosekunden (siehe epochNanoseconds, ein bigint). epochMilliseconds rechnet diesen Wert in Millisekunden um und rundet dabei ab in Richtung minus unendlich (Math.floor-Verhalten). Die Genauigkeit unterhalb einer Millisekunde geht dabei verloren.
Brauchen kannst du die Eigenschaft vor allem für die Zusammenarbeit mit bestehendem Code: Du erzeugst damit ein Date-Objekt, speicherst Zeitstempel als Zahl, sendest sie an Server oder vergleichst sie mit Date.now(). Den umgekehrten Weg gehst du mit Temporal.Instant.fromEpochMilliseconds().
Die Eigenschaft kann nur gelesen werden. Es gibt keinen Setter, denn Temporal.Instant ist unveränderlich. Für einen anderen Zeitpunkt erzeugst du eine neue Instanz, zum Beispiel mit add(), subtract() oder round().
Rückgabewert
Date.Beispiele
Zeitstempel eines festen Zeitpunkts auslesen
const instant = Temporal.Instant.from("2024-01-01T00:00:00Z");
console.log(instant.epochMilliseconds);
// Gleicher Wert wie bei Date
console.log(Date.UTC(2024, 0, 1));
Temporal.Instant in ein Date-Objekt umwandeln (Interop mit Alt-Code)
const instant = Temporal.Now.instant();
// Bibliotheken, die noch Date erwarten, bekommen ein Date-Objekt
const date = new Date(instant.epochMilliseconds);
console.log(date instanceof Date);
// Und zurück zu Temporal
const back = Temporal.Instant.fromEpochMilliseconds(date.getTime());
console.log(back.epochMilliseconds === instant.epochMilliseconds);
Zeitstempel an eine API senden und Ablaufzeit prüfen
const now = Temporal.Now.instant();
const expiresAt = now.add({ minutes: 30 });
const payload = JSON.stringify({
createdAt: now.epochMilliseconds,
expiresAt: expiresAt.epochMilliseconds,
});
console.log(payload);
// Später: Token noch gültig?
const { expiresAt: exp } = JSON.parse(payload);
const isValid = Date.now() < exp;
console.log(isValid);
Rundungsverhalten vor dem Epoch und Präzisionsverlust
const beforeEpoch = Temporal.Instant.from("1969-12-31T23:59:59.9995Z");
console.log(beforeEpoch.epochNanoseconds); // -500000n
console.log(beforeEpoch.epochMilliseconds); // abgerundet Richtung -∞
const precise = Temporal.Instant.from("2024-01-01T00:00:00.123456789Z");
console.log(precise.epochMilliseconds); // Mikro-/Nanosekunden fallen weg
// Wichtig · Fallstricke
- Präzisionsverlust: Alles unterhalb einer Millisekunde wird verworfen. Wenn dir Mikro- oder Nanosekunden wichtig sind, nimm
epochNanoseconds(bigint). - Abrunden statt Abschneiden: Vor 1970 wird Richtung minus unendlich gerundet. Aus −0,5 ms wird also
-1und nicht0. Das ist dasselbe wieMath.floor, aber nicht dasselbe wieMath.trunc. - Nur lesbar: Eine Zuweisung wie
instant.epochMilliseconds = 0wird im Sloppy-Mode stillschweigend ignoriert und löst im Strict-Mode einenTypeErroraus. - Keine Sekunden: Die Eigenschaft
epochSecondsaus frühen Entwürfen des Vorschlags wurde entfernt. Für Unix-Sekunden rechnest duMath.floor(instant.epochMilliseconds / 1000). - Kompatibilität: Temporal ist neu. Nativ wird es bisher nur in aktuellen Firefox- und Chromium-Versionen unterstützt, Safari und ältere Node.js-Versionen haben es noch nicht. Für den Einsatz in Produktion solltest du ein Polyfill wie
@js-temporal/polyfillodertemporal-polyfillverwenden oder die Unterstützung mittypeof Temporal !== \"undefined\"prüfen.