Start · Sprachen · JavaScript · Referenz · Temporal.PlainDateTime.prototype.nanosecond

Temporal.PlainDateTime.prototype.nanosecond

Eigenschaft

Liefert die Nanosekunden-Komponente (10<sup>-9</sup> s) eines <code>Temporal.PlainDateTime</code> als ganze Zahl von 0 bis 999.

seit JavaScript Temporal (TC39 Stage 3) – Firefox 139+, Chrome 144 Kategorie: method-property

Signatur

get Temporal.PlainDateTime.prototype.nanosecond

Beschreibung

Die Accessor-Eigenschaft nanosecond gibt den Nanosekunden-Anteil der Uhrzeit eines Temporal.PlainDateTime-Objekts zurück. Der Wert liegt immer zwischen 0 und 999. Er enthält also nicht die gesamten Nanosekunden innerhalb der Sekunde, sondern nur die letzten drei Stellen. Die höheren Stellen stehen in millisecond (10-3 s) und microsecond (10-6 s).

Die gesamte Sekundenbruchteil-Angabe setzt sich so zusammen: millisecond * 1_000_000 + microsecond * 1_000 + nanosecond. Diese Aufteilung hilft, wenn du Zeitstempel mit hoher Auflösung verarbeitest, etwa aus Messdaten, Logs oder Datenbanken mit Nanosekunden-Genauigkeit.

Die Eigenschaft kann nur gelesen werden. Weil Temporal-Objekte unveränderlich sind, erzeugst du einen geänderten Wert mit with({ nanosecond: … }). Diese Methode gibt eine neue Instanz zurück. Mit round() kannst du die Nanosekunden auf eine gröbere Einheit runden.

Rückgabewert

Typ
number
Beschreibung
Eine ganze Zahl von 0 bis 999: die Nanosekunden-Komponente der Uhrzeit.

Beispiele

Nanosekunden aus einem ISO-String lesen

const dt = Temporal.PlainDateTime.from("2024-03-15T10:30:45.123456789");

console.log(dt.millisecond); // 123
console.log(dt.microsecond); // 456
console.log(dt.nanosecond);  // 789
123 456 789

Gesamten Sekundenbruchteil in Nanosekunden berechnen

const dt = Temporal.PlainDateTime.from("2024-03-15T10:30:45.000250075");

const subSecondNs =
  dt.millisecond * 1_000_000 + dt.microsecond * 1_000 + dt.nanosecond;

console.log(subSecondNs); // 250075
250075

Nanosekunden ändern oder abschneiden (unveränderlich)

const dt = new Temporal.PlainDateTime(2024, 3, 15, 10, 30, 45, 0, 0, 500);

const geaendert = dt.with({ nanosecond: 42 });
console.log(geaendert.nanosecond); // 42
console.log(dt.nanosecond);        // 500 – Original bleibt unverändert

// Auf Mikrosekunden runden
const gerundet = dt.round({ smallestUnit: "microsecond" });
console.log(gerundet.microsecond, gerundet.nanosecond); // 1 0
42 500 1 0

// Wichtig · Fallstricke

  • Nur 0–999: nanosecond ist nicht die Gesamtzahl der Nanosekunden seit Sekundenbeginn. Für den vollen Bruchteil musst du millisecond und microsecond mit einrechnen.
  • Nur lesbar: Eine Zuweisung wie dt.nanosecond = 5 wird im nicht-strikten Modus stillschweigend ignoriert und löst im strikten Modus einen TypeError aus. Verwende stattdessen with().
  • Werte außerhalb des Bereichs: with({ nanosecond: 1000 }) begrenzt den Wert standardmäßig auf 999 (overflow: \"constrain\"). Mit { overflow: \"reject\" } wird stattdessen ein RangeError ausgelöst.
  • Keine Nanosekunden-Genauigkeit aus Date: Werte, die aus Date oder Temporal.Now stammen, haben je nach Plattform eine geringere tatsächliche Auflösung. Dann ist nanosecond oft 0.
  • Kompatibilität: Temporal ist noch nicht in allen Browsern verfügbar (bisher Firefox 139+ und Chrome 144+; Safari und ältere Node.js-Versionen fehlen). Für den produktiven Einsatz eignet sich ein Polyfill wie @js-temporal/polyfill oder temporal-polyfill.