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

Temporal.Instant.from()

Methode

Erzeugt ein neues <code>Temporal.Instant</code> aus einem anderen Instant-Objekt oder aus einem RFC-9557-/ISO-8601-String mit UTC-Offset.

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

Signatur

Temporal.Instant.from(info)

Beschreibung

Temporal.Instant.from() ist die übliche Fabrikmethode, um einen exakten Zeitpunkt ohne Kalender und ohne Zeitzone zu erzeugen. Typisch ist das Einlesen von Zeitstempeln aus APIs, Logdateien oder Datenbanken, etwa "2024-03-15T12:30:00Z" oder "2024-03-15T14:30:00+02:00".

Ein String muss einen UTC-Offset enthalten, also Z oder ±HH:MM. Nur so lässt er sich eindeutig auf einen Zeitpunkt abbilden. Annotationen in eckigen Klammern wie [Europe/Berlin] oder [u-ca=gregory] sind erlaubt, werden aber für die Berechnung nicht verwendet. Entscheidend ist allein der Offset.

Übergibst du ein Temporal.Instant, entsteht eine unabhängige Kopie. Bei einem Temporal.ZonedDateTime wird dessen exakter Zeitpunkt übernommen. Alle anderen Werte werden zuerst in einen String umgewandelt und dann geparst.

Hast du den Zeitpunkt als Zahl vorliegen, sind Temporal.Instant.fromEpochMilliseconds() oder Temporal.Instant.fromEpochNanoseconds() die passenden Alternativen.

Parameter

Name Typ Default Beschreibung
$info Pflicht string | Temporal.Instant | Temporal.ZonedDateTime Ein RFC-9557-/ISO-8601-String mit Datum, Uhrzeit und Offset (Z oder ±HH:MM) oder ein vorhandenes Temporal.Instant bzw. Temporal.ZonedDateTime. Andere Objekte werden per toString() in einen String umgewandelt.

Rückgabewert

Typ
Temporal.Instant
Beschreibung
Ein neues Temporal.Instant für den exakten Zeitpunkt, auf Nanosekunden genau.

Beispiele

Zeitstempel mit Offset einlesen

const a = Temporal.Instant.from("2024-03-15T12:30:00Z");
const b = Temporal.Instant.from("2024-03-15T14:30:00+02:00");

console.log(a.toString());
console.log(b.toString());
console.log(a.equals(b)); // gleicher Zeitpunkt
2024-03-15T12:30:00Z 2024-03-15T12:30:00Z true

Annotationen werden ignoriert, der Offset zählt

const i = Temporal.Instant.from("2024-07-01T10:00:00.123456789+02:00[Europe/Berlin]");
console.log(i.toString());
console.log(i.epochMilliseconds);
2024-07-01T08:00:00.123456789Z 1719820800123

Eingaben aus einer API sicher parsen

const parseInstant = (value) => {
  try {
    return Temporal.Instant.from(value);
  } catch (err) {
    console.warn(`Ungültiger Zeitstempel: ${value} (${err.name})`);
    return null;
  }
};

const events = ["2024-05-02T08:00:00Z", "2024-05-01", "2024-05-01T23:15:00-04:00"];
const sorted = events
  .map(parseInstant)
  .filter(Boolean)
  .sort(Temporal.Instant.compare);

console.log(sorted.map(String));
Ungültiger Zeitstempel: 2024-05-01 (RangeError) ["2024-05-02T03:15:00Z", "2024-05-02T08:00:00Z"]

Kopie aus Instant oder ZonedDateTime

const zdt = Temporal.ZonedDateTime.from("2024-12-24T18:00:00+01:00[Europe/Berlin]");
const fromZdt = Temporal.Instant.from(zdt);
const copy = Temporal.Instant.from(fromZdt);

console.log(fromZdt.toString());
console.log(copy === fromZdt, copy.equals(fromZdt));
2024-12-24T17:00:00Z false true

// Wichtig · Fallstricke

  • Ein Offset ist Pflicht: Strings ohne Z bzw. ±HH:MM wie "2024-05-01T10:00" lösen einen RangeError aus. Eine Zeitzonen-Annotation allein reicht nicht. In diesem Fall nimmst du Temporal.ZonedDateTime.from() und danach .toInstant().
  • Ein RangeError tritt auch bei ungültigen Datumsangaben auf, zum Beispiel beim 30. Februar, oder bei Zeitpunkten außerhalb des erlaubten Bereichs von ±108 Tagen um die Unix-Epoche. Ungeeignete Typen wie number oder null führen zu einem TypeError.
  • Anders als Date.parse() ist das Parsen streng und in allen Umgebungen gleich. Es werden keine Formate erraten.
  • Werte in eckigen Klammern, etwa die Zeitzone oder der Kalender, gehen verloren. Willst du die Zeitzone behalten, verwende Temporal.ZonedDateTime.
  • Kompatibilität: Temporal ist noch nicht überall verfügbar, derzeit in Firefox 139+ und Chrome/Edge 144+. In anderen Umgebungen brauchst du einen Polyfill wie @js-temporal/polyfill oder temporal-polyfill. Prüfen kannst du das mit typeof Temporal !== "undefined".