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

Temporal.Duration.from()

Methode

Erzeugt ein neues <code>Temporal.Duration</code>-Objekt aus einer vorhandenen Dauer, einem Objekt mit Dauer-Feldern oder einem ISO-8601-Dauer-String.

seit JavaScript Temporal (ES-Proposal Stage 3, voraussichtlich ES2 Kategorie: method-property

Signatur

Temporal.Duration.from(info)

Beschreibung

Temporal.Duration.from() ist der empfohlene Weg, eine Zeitdauer zu erstellen. Anders als der Konstruktor new Temporal.Duration(years, months, …) mit seinen zehn Positionsargumenten ist hier klar zu erkennen, welche Einheit gemeint ist, z. B. { hours: 2, minutes: 15 }. Außerdem kann die Methode ISO-8601-Strings wie "P1Y2M10DT2H30M" einlesen. Das ist praktisch für Konfigurationsdateien, API-Antworten oder Datenbankwerte.

Die Methode nimmt drei Arten von Eingaben an:

  • Temporal.Duration-Instanz: Es wird eine unabhängige Kopie mit denselben Werten erzeugt.
  • Objekt mit Dauer-Feldern: years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds. Mindestens eins davon muss vorhanden sein. Fehlende Felder zählen als 0.
  • ISO-8601-Dauer-String: z. B. "PT45M", "P3W" oder "-P1DT12H" für eine negative Dauer.

Die Werte werden nicht umgerechnet: Aus { minutes: 90 } wird nicht automatisch „1 Stunde 30 Minuten“. Wenn du so eine Umrechnung brauchst, nimm duration.round({ largestUnit: "hour" }). Alle von null verschiedenen Felder müssen dasselbe Vorzeichen haben.

Parameter

Name Typ Default Beschreibung
$info Pflicht Temporal.Duration | string | { years?: number, months?: number, weeks?: number, days?: number, hours?: number, minutes?: number, seconds?: number, milliseconds?: number, microseconds?: number, nanoseconds?: number } Die Quelle der Dauer: eine vorhandene Temporal.Duration, ein Objekt mit mindestens einem Dauer-Feld (Feldnamen im Plural, nur ganze Zahlen) oder ein ISO-8601-Dauer-String.

Rückgabewert

Typ
Temporal.Duration
Beschreibung
Ein neues, unveränderliches Temporal.Duration-Objekt. Auch wenn du eine Temporal.Duration übergibst, bekommst du ein neues Objekt zurück und nicht dieselbe Referenz.

Beispiele

Dauer aus einem Objekt mit Feldern erstellen

const meeting = Temporal.Duration.from({ hours: 1, minutes: 30 });

console.log(meeting.toString());
console.log(meeting.hours, meeting.minutes);
// Gesamtdauer in Minuten
console.log(meeting.total("minutes"));

// Keine automatische Umrechnung:
const raw = Temporal.Duration.from({ minutes: 90 });
console.log(raw.toString());
console.log(raw.round({ largestUnit: "hour" }).toString());
PT1H30M 1 30 90 PT90M PT1H30M

ISO-8601-String aus einer Konfiguration einlesen

const config = { sessionTimeout: "PT15M", retention: "P30D", offset: "-PT2H" };

const timeout = Temporal.Duration.from(config.sessionTimeout);
const retention = Temporal.Duration.from(config.retention);
const offset = Temporal.Duration.from(config.offset);

console.log(timeout.total("seconds"));
console.log(retention.days);
console.log(offset.hours, offset.sign);

// Nachkommastellen bei Stunden sind im String erlaubt
console.log(Temporal.Duration.from("PT1.5H").toString());

// Ablaufzeitpunkt berechnen
const start = Temporal.PlainDateTime.from("2025-03-01T10:00");
console.log(start.add(timeout).toString());
900 30 -2 -1 PT1H30M 2025-03-01T10:15:00

Vorhandene Dauer kopieren

const original = Temporal.Duration.from({ days: 2, hours: 6 });
const copy = Temporal.Duration.from(original);

console.log(copy === original);
console.log(copy.toString() === original.toString());
console.log(Temporal.Duration.compare(copy, original));
false true 0

Ungültige Eingaben abfangen

const tryParse = (input) => {
  try {
    return Temporal.Duration.from(input).toString();
  } catch (err) {
    return `${err.name}: ungültig`;
  }
};

console.log(tryParse({ hours: 2 }));
console.log(tryParse({ hours: 1, minutes: -5 })); // gemischte Vorzeichen
console.log(tryParse({ hours: 1.5 }));            // keine ganze Zahl
console.log(tryParse({ hour: 1 }));               // Einzahl-Feldname
console.log(tryParse("1 Stunde"));                // kein ISO-8601
PT2H RangeError: ungültig RangeError: ungültig TypeError: ungültig RangeError: ungültig