Temporal.Duration
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig vor der Verwendung auf produktiven Webseiten.
Das Temporal.Duration
Objekt repräsentiert einen Unterschied zwischen zwei Zeitpunkten, der in der Datums-/Zeitrechnung verwendet werden kann. Es wird grundsätzlich als Kombination von Jahren, Monaten, Wochen, Tagen, Stunden, Minuten, Sekunden, Millisekunden, Mikrosekunden und Nanosekunden dargestellt.
Beschreibung
ISO 8601-Dauerformat
Duration
Objekte können unter Verwendung des ISO 8601-Dauerformats (mit einigen Erweiterungen, die von ECMAScript spezifiziert sind) serialisiert und geparst werden. Der String hat folgendes Format (Leerzeichen sind nur zur Lesbarkeit vorhanden und sollten im eigentlichen String nicht enthalten sein):
±P nY nM nW nD T nH nM nS
±
Optional-
Ein optionales Plus- oder Minuszeichen (
+
oder-
), welches positive oder negative Dauer darstellt. Standard ist positiv. P
-
Ein wörtlicher Buchstabe
P
oderp
, der für "Period" steht. nY
,nM
,nW
,nD
,nH
,nM
,nS
-
Eine Zahl gefolgt von einem wörtlichen Buchstaben, der die Anzahl der Jahre (
Y
), Monate (M
), Wochen (W
), Tage (D
), Stunden (H
), Minuten (M
) oder Sekunden (S
) darstellt. Alle außer der letzten vorhandenen Komponente müssen Ganzzahlen sein. Die letzte Komponente, wenn es eine Zeitkomponente (Stunden, Minuten oder Sekunden) ist, kann einen Bruchteil von 1 bis 9 Ziffern haben, vorneweg mit einem Punkt oder Komma, wiePT0.0021S
oderPT1.1H
. Jegliche null Komponenten können weggelassen werden, aber es sollte mindestens eine Komponente vorhanden sein (selbst wenn sie den Wert null hat, in diesem Fall ist die Dauer null). T
-
Ein wörtlicher Buchstabe
T
odert
, der den Datumsteil vom Zeitteil trennt, der nur dann vorhanden sein sollte, wenn mindestens eine Komponente nach ihm folgt.
Hier sind einige Beispiele:
ISO 8601 | Bedeutung |
---|---|
P1Y1M1DT1H1M1.1S |
1 Jahr, 1 Monat, 1 Tag, 1 Stunde, 1 Minute, 1 Sekunde und 100 Millisekunden |
P40D |
40 Tage |
P1Y1D |
1 Jahr und 1 Tag |
P3DT4H59M |
3 Tage, 4 Stunden und 59 Minuten |
PT2H30M |
2 Stunden und 30 Minuten |
P1M |
1 Monat |
PT1M |
1 Minute |
PT0.0021S |
2,1 Millisekunden (2 Millisekunden und 100 Mikrosekunden) |
PT0S |
Null (kanonische Darstellung) |
P0D |
Null |
Hinweis:
Gemäß dem ISO 8601-1 Standard dürfen Wochen nicht zusammen mit anderen Einheiten erscheinen und Dauern können nur positiv sein. Als Erweiterungen des Standards erlaubt ISO 8601-2, welches Temporal verwendet, ein Vorzeichen am Anfang des Strings und das Kombinieren von Wochen mit anderen Einheiten. Daher, wenn Ihre Dauer als ein String wie P3W1D
, +P1M
oder -P1M
serialisiert wird, beachten Sie, dass andere Programme es möglicherweise nicht akzeptieren.
Bei der Serialisierung respektiert die Ausgabe die gespeicherten Komponenten soweit wie möglich und bewahrt unausgeglichene Komponenten. Allerdings werden Untersekunden-Komponenten als eine einzige gebrochene Sekunde serialisiert, sodass deren genaue Werte, falls unausgeglichen, verloren gehen könnten. Das Pluszeichen wird für positive Dauern weggelassen. Die Null-Dauer wird immer als PT0S
serialisiert.
Kalenderdauern
Eine Kalenderdauer ist eine, die eine der Kalendereinheiten enthält: Wochen, Monate und Jahre. Eine Nicht-Kalender-Dauer ist portabel und kann ohne Kalendersysteminformationen in der Datums-/Zeitrechnung verwendet werden, da sie eindeutig eine feste Zeitdauer repräsentiert. Eine Kalenderdauer ist jedoch nicht portabel, da die Anzahl der Tage in einem Monat oder Jahr vom Kalendersystem und vom Referenzzeitpunkt abhängt. Daher führt der Versuch, mathematische Operationen auf Kalenderdauern auszuführen, zu einem Fehler, da Dauern selbst keine Kalenderinformationen nachverfolgen. Beispielsweise, wenn wir im Mai des gregorianischen Kalenders sind, dann ist "1 Monat" gleich "31 Tage", aber wenn wir im April sind, dann wird "1 Monat" zu "30 Tage". Um Kalenderdauern hinzuzufügen oder zu subtrahieren, müssen Sie sie stattdessen zu Daten hinzufügen:
const dur1 = Temporal.Duration.from({ years: 1 });
const dur2 = Temporal.Duration.from({ months: 1 });
dur1.add(dur2); // RangeError: can't compare durations when "relativeTo" is undefined
const startingPoint = Temporal.PlainDate.from("2021-01-01"); // ISO 8601 calendar
startingPoint.add(dur1).add(dur2).since(startingPoint); // "P396D"
Andere Operationen, einschließlich round()
, total()
, und compare()
, benötigen eine relativeTo
-Option, um die notwendigen Kalender- und Referenzzeitinformationen bereitzustellen. Diese Option kann ein Temporal.PlainDate
, Temporal.PlainDateTime
, Temporal.ZonedDateTime
sein, oder anderweitig ein Objekt oder String, das mit Temporal.ZonedDateTime.from()
(wenn die timeZone
-Option bereitgestellt wird oder der String eine Zeitzonenanmerkung enthält) oder Temporal.PlainDateTime.from()
konvertierbar ist.
Beachten Sie, dass die Umwandlung von days
nach hours
technisch auch mehrdeutig ist, da die Länge eines Tages aufgrund von Verschiebungsänderungen, wie der Sommerzeit, variieren kann. Sie können ein zoniertes relativeTo
bereitstellen, um diese Änderungen zu berücksichtigen; andernfalls werden 24-Stunden-Tage angenommen.
Dauerabgleich
Es gibt viele Möglichkeiten, dieselbe Dauer darzustellen: zum Beispiel sind "1 Minute und 30 Sekunden" und "90 Sekunden" gleichwertig. Je nach Kontext kann jedoch eine Darstellung angemessener sein als die andere. Daher bewahrt das Duration
-Objekt im Allgemeinen die Eingabewerte so weit wie möglich, sodass es beim Formatieren so angezeigt wird, wie Sie es erwarten.
Jede Komponente einer Dauer hat ihren optimalen Bereich; Stunden sollten von 0 bis 23, Minuten von 0 bis 59 sein, und so weiter. Wenn eine Komponente ihren optimalen Bereich überschreitet, kann der Überschuss in die nächste größere Komponente "übertragen" werden. Um zu übertragen, müssen wir die Frage beantworten "Wie viele X sind in einem Y?", was eine komplizierte Frage für Kalendereinheiten ist; in diesem Fall wird ein Kalender benötigt. Beachten Sie auch, dass standardmäßig days
direkt in months
übertragen werden; die Wochen-Einheit wird nur übertragen, wenn explizit angefordert. Wenn wir so viel wie möglich übertragen, wird das Endresultat, bei dem alle Komponenten in ihrem optimalen Bereich liegen, als "ausgeglichene" Dauer bezeichnet. Unaustarierte Dauern treten normalerweise in der "stark belasteten" Form auf, bei der die größte Einheit unaustariert ist (z. B. "27 Stunden und 30 Minuten"); andere Formen, wie "23 Stunden und 270 Minuten", sind selten zu sehen.
Die round()
Methode balanciert die Dauer immer in der "stark belasteten" Form aus, bis zur largestUnit
-Option. Mit einer manuellen largestUnit
-Option, die groß genug ist, können Sie die Dauer vollständig austarieren. Ähnlich balancieren die add()
und subtract()
Methoden die Ergebnisdauer zur größten Einheit der Eingabedauern.
Beachten Sie, dass es aufgrund des ISO 8601-Dauerformats nicht möglich ist, unaustarierte Untersekundenkomponenten während der Serialisierung mit dem Standardformat beizubehalten, da diese als eine einzige gebrochene Zahl dargestellt werden. Zum Beispiel wird "1000 Millisekunden" als "PT1S"
serialisiert und dann als "1 Sekunde" deserialisiert. Wenn Sie die Größenordnungen der Untersekundenkomponenten beibehalten müssen, müssen Sie diese manuell als JSON-Objekt serialisieren (da standardmäßig die toJSON()
Methode die Dauer im ISO 8601-Format serialisiert).
Dauerzeichen
Da eine Dauer ein Unterschied zwischen zwei Zeitpunkten ist, kann sie positiv, negativ oder null sein. Wenn beispielsweise Ereigniszeiten in relativer Zeit angezeigt werden, können negative Dauern Ereignisse in der Vergangenheit darstellen und positive Dauern für die Zukunft. In unserer Darstellung mit einer Kombination von Zeitkomponenten wird das Zeichen innerhalb jeder Komponente gespeichert: Eine negative Dauer hat immer alle Komponenten negativ (oder null), und eine positive Dauer hat immer alle Komponenten positiv (oder null). Eine Dauer mit Komponenten gemischter Vorzeichen zu konstruieren ist ungültig und wird vom Konstruktor oder der with()
Methode abgelehnt. Die add()
und subtract()
Methoden balancieren die Ergebnisdauer aus, um gemischte Vorzeichen zu vermeiden.
Konstruktor
Temporal.Duration()
Experimentell-
Erstellt ein neues
Temporal.Duration
Objekt, indem die zugrundeliegenden Daten direkt bereitgestellt werden.
Statische Methoden
Temporal.Duration.compare()
Experimentell-
Gibt eine Zahl (-1, 0 oder 1) zurück, die angibt, ob die erste Dauer kürzer, gleich oder länger als die zweite ist.
Temporal.Duration.from()
Experimentell-
Erstellt ein neues
Temporal.Duration
Objekt aus einem anderenTemporal.Duration
Objekt, einem Objekt mit Dauereigenschaften oder einem ISO 8601-String.
Instanz-Eigenschaften
Diese Eigenschaften sind auf Temporal.Duration.prototype
definiert und werden von allen Temporal.Duration
Instanzen geteilt.
Temporal.Duration.prototype.blank
Experimentell-
Gibt einen Boolean-Wert zurück, der
true
ist, wenn diese Dauer eine Null-Dauer darstellt, und ansonstenfalse
. Equivalent zuduration.sign === 0
. Temporal.Duration.prototype.constructor
-
Die Konstrukturfunktion, die das Instanzobjekt erstellt hat. Für
Temporal.Duration
Instanzen ist der initiale Wert derTemporal.Duration()
Konstruktor. Temporal.Duration.prototype.days
Experimentell-
Gibt eine Ganzzahl zurück, die die Anzahl der Tage in der Dauer darstellt.
Temporal.Duration.prototype.hours
Experimentell-
Gibt eine Ganzzahl zurück, die die Anzahl der Stunden in der Dauer darstellt.
Temporal.Duration.prototype.microseconds
Experimentell-
Gibt eine Ganzzahl zurück, die die Anzahl der Mikrosekunden in der Dauer darstellt.
Temporal.Duration.prototype.milliseconds
Experimentell-
Gibt eine Ganzzahl zurück, die die Anzahl der Millisekunden in der Dauer darstellt.
Temporal.Duration.prototype.minutes
Experimentell-
Gibt eine Ganzzahl zurück, die die Anzahl der Minuten in der Dauer darstellt.
Temporal.Duration.prototype.months
Experimentell-
Gibt eine Ganzzahl zurück, die die Anzahl der Monate in der Dauer darstellt.
Temporal.Duration.prototype.nanoseconds
Experimentell-
Gibt eine Ganzzahl zurück, die die Anzahl der Nanosekunden in der Dauer darstellt.
Temporal.Duration.prototype.seconds
Experimentell-
Gibt eine Ganzzahl zurück, die die Anzahl der Sekunden in der Dauer darstellt.
Temporal.Duration.prototype.sign
Experimentell-
Gibt
1
zurück, wenn diese Dauer positiv ist,-1
, wenn negativ, und0
, wenn sie null ist. Temporal.Duration.prototype.weeks
Experimentell-
Gibt eine Ganzzahl zurück, die die Anzahl der Wochen in der Dauer darstellt.
Temporal.Duration.prototype.years
Experimentell-
Gibt eine Ganzzahl zurück, die die Anzahl der Jahre in der Dauer darstellt.
Temporal.Duration.prototype[Symbol.toStringTag]
-
Der anfängliche Wert der
[Symbol.toStringTag]
Eigenschaft ist der String"Temporal.Duration"
. Diese Eigenschaft wird inObject.prototype.toString()
verwendet.
Instanz-Methoden
Temporal.Duration.prototype.abs()
Experimentell-
Gibt ein neues
Temporal.Duration
Objekt mit dem absoluten Wert dieser Dauer zurück (alle Felder behalten die gleiche Größe, aber das Vorzeichen wird positiv). Temporal.Duration.prototype.add()
Experimentell-
Gibt ein neues
Temporal.Duration
Objekt mit der Summe dieser Dauer und einer gegebenen Dauer (in einer Form konvertierbar durchTemporal.Duration.from()
) zurück. Das Ergebnis ist ausgeglichen. Temporal.Duration.prototype.negated()
Experimentell-
Gibt ein neues
Temporal.Duration
Objekt mit dem negativen Wert dieser Dauer zurück (alle Felder behalten die gleiche Größe, aber das Vorzeichen wird umgekehrt). Temporal.Duration.prototype.round()
Experimentell-
Gibt ein neues
Temporal.Duration
Objekt mit der Dauer, gerundet auf die gegebene kleinste Einheit und/oder ausgeglichen auf die gegebene größte Einheit zurück. Temporal.Duration.prototype.subtract()
Experimentell-
Gibt ein neues
Temporal.Duration
Objekt mit dem Unterschied zwischen dieser Dauer und einer gegebenen Dauer (in einer Form konvertierbar durchTemporal.Duration.from()
) zurück. Equivalent zum Hinzufügen des negativen Wertes der anderen Dauer. Temporal.Duration.prototype.toJSON()
Experimentell-
Gibt einen String zurück, der diese Dauer im gleichen ISO 8601-Format wie beim Aufrufen von
toString()
darstellt. Soll vonJSON.stringify()
implizit aufgerufen werden. Temporal.Duration.prototype.toLocaleString()
Experimentell-
Gibt einen String mit einer sprachsensitiven Darstellung dieser Dauer zurück. In Implementierungen mit Unterstützung für die
Intl.DurationFormat
API delegiert diese Methode anIntl.DurationFormat
. Temporal.Duration.prototype.toString()
Experimentell-
Gibt einen String zurück, der diese Dauer im ISO 8601-Format darstellt.
Temporal.Duration.prototype.total()
Experimentell-
Gibt eine Zahl zurück, die die Gesamtdauer in der gegebenen Einheit darstellt.
Temporal.Duration.prototype.valueOf()
Experimentell-
Wirft einen
TypeError
, der verhindert, dassTemporal.Duration
Instanzen implizit in primitive Typen umgewandelt werden, wenn sie in arithmetischen oder Vergleichsoperationen verwendet werden. Temporal.Duration.prototype.with()
Experimentell-
Gibt ein neues
Temporal.Duration
Objekt zurück, das diese Dauer mit einigen Feldern, die durch neue Werte ersetzt wurden, darstellt.
Spezifikationen
Specification |
---|
Temporal proposal # sec-temporal-duration-objects |
Browser-Kompatibilität
BCD tables only load in the browser