Signatur
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 als0. - 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
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());
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());
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));
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