Start · Sprachen · JavaScript · Referenz · Temporal.Instant.fromEpochMilliseconds()

Temporal.Instant.fromEpochMilliseconds()

Methode

Erstellt ein neues <code>Temporal.Instant</code> aus der Anzahl der Millisekunden seit dem Unix-Epoch (1. Januar 1970, 00:00:00 UTC).

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

Signatur

Temporal.Instant.fromEpochMilliseconds(epochMilliseconds)

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

Typ
Temporal.Instant
Beschreibung
Ein neues 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);
2025-01-01T00:00:00Z 1735689600000000000n

In lokale Zeitzone umwandeln

const instant = Temporal.Instant.fromEpochMilliseconds(1735689600000);
const berlin = instant.toZonedDateTimeISO('Europe/Berlin');

console.log(berlin.toString());
console.log(berlin.hour);
2025-01-01T01:00:00+01:00[Europe/Berlin] 1

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());
PT1M30S 1970-01-01T00:00:00Z 1969-12-31T00:00:00Z

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
RangeError: ungültiger Wert 1.5 RangeError: ungültiger Wert NaN RangeError: ungültiger Wert 8640000000000001

// Wichtig · Fallstricke

  • Nur ganze Zahlen: Kommazahlen, NaN und Infinity führen zu einem RangeError. Anders als bei new Date(1.5) wird hier nicht still abgeschnitten. Runde bei Bedarf vorher selbst, zum Beispiel mit Math.round(). Das ist bei Werten aus performance.now() wichtig.
  • Kein BigInt: Wenn du ein BigInt wie 1000n übergibst, wird ein TypeError ausgelöst. Für BigInt-Nanosekunden gibt es Temporal.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 einen RangeError aus.
  • 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/polyfill oder temporal-polyfill hilft. Prüfe die Unterstützung mit typeof Temporal !== 'undefined'.