Signatur
Beschreibung
Temporal.Instant.fromEpochMilliseconds() ist eine statische Fabrikmethode. Sie wandelt einen Millisekunden-Zeitstempel in ein Temporal.Instant um, also in einen exakten Zeitpunkt ohne Zeitzone und ohne Kalender. Einen solchen Zeitstempel liefern zum Beispiel Date.now(), Date.prototype.getTime(), viele REST-APIs, Datenbanken und Log-Formate.
Die Methode ist die wichtigste Brücke zwischen alter Date-Welt und Temporal. Wenn du nur Millisekunden hast, ist sie der kürzeste Weg zu einem Instant. Von dort aus kannst du rechnen, vergleichen oder mit toZonedDateTimeISO() in eine Zeitzone umwandeln. Hast du schon ein Date-Objekt, ist date.toTemporalInstant() die direkte Alternative.
Intern speichert Temporal Zeitpunkte in Nanosekunden als BigInt. Deine Millisekunden werden also mit 1.000.000 multipliziert. Die Genauigkeit bleibt dabei vollständig erhalten. Für Werte mit höherer Auflösung gibt es Temporal.Instant.fromEpochNanoseconds().
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $epochMilliseconds Pflicht | number | Millisekunden seit dem Unix-Epoch. Der Wert muss eine ganze Zahl sein und darf höchstens ±8,64·1015 betragen (±108 Tage). Negative Werte stehen für Zeitpunkte vor 1970. Der Wert wird zuerst mit ToNumber in eine Zahl umgewandelt. |
Rückgabewert
Temporal.Instant-Objekt für den angegebenen Zeitpunkt.Beispiele
Zeitstempel aus einer API umwandeln
// z. B. aus JSON: { "createdAt": 1735689600000 }
const createdAt = 1735689600000;
const instant = Temporal.Instant.fromEpochMilliseconds(createdAt);
console.log(instant.toString());
console.log(instant.epochNanoseconds);
In lokale Zeitzone umwandeln
const instant = Temporal.Instant.fromEpochMilliseconds(1735689600000);
const berlin = instant.toZonedDateTimeISO('Europe/Berlin');
console.log(berlin.toString());
console.log(berlin.hour);
Date-Werte migrieren und Zeitspanne berechnen
const start = Temporal.Instant.fromEpochMilliseconds(Date.now());
// ... Arbeit erledigen ...
const ende = Temporal.Instant.fromEpochMilliseconds(Date.now() + 90_000);
const dauer = start.until(ende, { largestUnit: 'minutes' });
console.log(dauer.toString());
// Epoch selbst und Zeit vor 1970
console.log(Temporal.Instant.fromEpochMilliseconds(0).toString());
console.log(Temporal.Instant.fromEpochMilliseconds(-86_400_000).toString());
Ungültige Werte abfangen
const sicher = (ms) => {
try {
return Temporal.Instant.fromEpochMilliseconds(ms);
} catch (err) {
console.log(`${err.name}: ungültiger Wert ${ms}`);
return null;
}
};
sicher(1.5); // keine ganze Zahl
sicher(NaN);
sicher(8.64e15 + 1); // außerhalb des Bereichs
// Wichtig · Fallstricke
- Nur ganze Zahlen: Kommazahlen,
NaNundInfinityführen zu einemRangeError. Anders als beinew Date(1.5)wird hier nicht still abgeschnitten. Runde bei Bedarf vorher selbst, zum Beispiel mitMath.round(). Das ist bei Werten ausperformance.now()wichtig. - Kein BigInt: Wenn du ein
BigIntwie1000nübergibst, wird einTypeErrorausgelöst. Für BigInt-Nanosekunden gibt esTemporal.Instant.fromEpochNanoseconds(). - Sekunden oder Millisekunden: Unix-Zeitstempel in Sekunden (z. B. aus JWT
exp/iat) musst du vorher mit 1000 multiplizieren. Sonst landest du im Januar 1970. - Wertebereich: Erlaubt sind ±8,64·1015 ms, also derselbe Bereich wie bei
Date. Werte außerhalb davon lösen einenRangeErroraus. - Browser-Unterstützung: Temporal gibt es erst in neueren Browsern (Firefox 139+, Chrome/Edge 144+). Safari und ältere Node.js-Versionen unterstützen es noch nicht. Ein Polyfill wie
@js-temporal/polyfillodertemporal-polyfillhilft. Prüfe die Unterstützung mittypeof Temporal !== 'undefined'.