Start · Sprachen · JavaScript · Referenz · Temporal.Instant

Temporal.Instant

Klasse

Repräsentiert einen eindeutigen, unveränderlichen Zeitpunkt auf der Zeitachse mit Nanosekundenpräzision, unabhängig von Zeitzonen oder Kalendern.

seit JavaScript Stage 3 Proposal (TC39) – experimentell, Polyfill Kategorie: core

Signatur

class Temporal.Instant

Beschreibung

Temporal.Instant ist Teil der Temporal-API und stellt einen absoluten Moment in der Zeit dar – ähnlich wie Date, aber mit Nanosekundenpräzision und ohne die bekannten Schwächen des Date-Objekts. Ein Instant ist immer UTC-basiert und kennt weder Zeitzonen noch Kalender.

Der interne Wert eines Instant wird als Anzahl Nanosekunden seit dem Unix-Epoch (1970-01-01T00:00:00Z) gespeichert. Dies erlaubt präzise Zeitstempel für technische Protokollierung, Benchmarking und Synchronisation verteilter Systeme.

Um einen Instant menschenlesbar darzustellen oder Datums-/Zeitarithmetik mit Zeitzonen durchzuführen, kann man ihn mit toZonedDateTimeISO() in ein Temporal.ZonedDateTime umwandeln. Für einfache Differenzberechnungen steht die Methode until() bzw. since() zur Verfügung, die eine Temporal.Duration zurückgibt.

  • Unveränderlich (immutable): Alle Operationen geben neue Instanzen zurück.
  • Vergleichbar: Statische Methode Temporal.Instant.compare() ermöglicht die Sortierung.
  • Serialisierbar: toString() liefert einen ISO-8601-String; Temporal.Instant.from() parst ihn zurück.

Parameter

Name Typ Default Beschreibung
$epochNanoseconds Pflicht BigInt Anzahl der Nanosekunden seit dem Unix-Epoch (1970-01-01T00:00:00Z) als BigInt. Negative Werte repräsentieren Zeitpunkte vor 1970.

Rückgabewert

Typ
Temporal.Instant
Beschreibung
Eine neue, unveränderliche Temporal.Instant-Instanz, die den angegebenen absoluten Zeitpunkt repräsentiert.

Beispiele

Aktuellen Zeitpunkt ermitteln und ausgeben

// Aktuellen Zeitpunkt als Temporal.Instant
const now = Temporal.Now.instant();
console.log(now.toString()); // z. B. '2024-06-15T10:23:45.123456789Z'

// Nanosekunden seit Unix-Epoch
console.log(now.epochNanoseconds); // z. B. 1718446425123456789n

// Aus ISO-String erzeugen
const instant = Temporal.Instant.from('2024-01-01T00:00:00Z');
console.log(instant.epochSeconds); // 1704067200
2024-06-15T10:23:45.123456789Z 1718446425123456789n 1704067200

Zeitdifferenz berechnen und Zeitzonen-Konvertierung

const start = Temporal.Instant.from('2024-03-10T08:00:00Z');
const end   = Temporal.Instant.from('2024-03-10T10:30:00Z');

// Differenz berechnen
const duration = start.until(end, { largestUnit: 'hour' });
console.log(`Dauer: ${duration.hours}h ${duration.minutes}min`);
// Dauer: 2h 30min

// Zeitpunkt in Berliner Ortszeit umwandeln
const berlinZDT = start.toZonedDateTimeISO('Europe/Berlin');
console.log(berlinZDT.toString());
// 2024-03-10T09:00:00+01:00[Europe/Berlin]

// Zwei Instants vergleichen
const cmp = Temporal.Instant.compare(start, end);
console.log(cmp); // -1 (start liegt vor end)
Dauer: 2h 30min 2024-03-10T09:00:00+01:00[Europe/Berlin] -1

// Wichtig · Fallstricke

Browser-Kompatibilität: Temporal ist derzeit (Stand 2024) ein TC39 Stage-3-Proposal und in keinem Browser standardmäßig aktiviert. Für produktiven Einsatz sollte das offizielle Polyfill @js-temporal/polyfill verwendet werden. Node.js unterstützt Temporal ebenfalls noch nicht nativ.

BigInt-Pflicht: Der Konstruktor erwartet zwingend einen BigInt-Wert (z. B. 1000000000n), da reguläre number-Werte nicht ausreichend präzise für Nanosekunden sind. Ein TypeError wird geworfen, wenn kein BigInt übergeben wird.

Wertebereich: Der Wert muss innerhalb des erlaubten Bereichs von ca. ±108 Tagen relativ zum Unix-Epoch liegen. Werte außerhalb dieses Bereichs führen zu einem RangeError.

Kein Timezone-/Kalender-Bezug: Temporal.Instant kennt keine Zeitzonen oder Kalender. Für lokale Zeitdarstellung immer toZonedDateTimeISO() oder toZonedDateTime() verwenden.