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 Datum-/Uhrzeitarithmetik verwendet werden kann. Es wird grundsätzlich als Kombination von Werten für Jahre, Monate, Wochen, Tage, Stunden, Minuten, Sekunden, Millisekunden, Mikrosekunden und Nanosekunden dargestellt.
Beschreibung
ISO 8601-Dauerformat
Duration
-Objekte können unter Verwendung des ISO 8601-Dauerformats (mit einigen von ECMAScript spezifizierten Erweiterungen) serialisiert und geparst werden. Der String hat die folgende Form (Leerzeichen dienen nur der Lesbarkeit und sollten im tatsächlichen String nicht vorhanden sein):
±P nY nM nW nD T nH nM nS
±
Optional-
Ein optionales Vorzeichenzeichen (
+
oder-
), das eine positive oder negative Dauer darstellt. Standard ist positiv. P
-
Ein literales Zeichen
P
oderp
, das für "Periode" steht. nY
,nM
,nW
,nD
,nH
,nM
,nS
-
Eine Zahl gefolgt von einem literalen Zeichen, das die Anzahl der Jahre (
Y
), Monate (M
), Wochen (W
), Tage (D
), Stunden (H
), Minuten (M
) oder Sekunden (S
) darstellt. Alle außer der letzten existierenden Komponente müssen ganzzahlig sein. Die letzte Komponente, wenn sie eine Zeitkomponente ist (Stunden, Minuten oder Sekunden), kann einen Bruchteil von 1 bis 9 Stellen haben, die mit einem Punkt oder Komma eingeleitet werden, wie z. B.PT0.0021S
oderPT1.1H
. Alle Komponenten mit dem Wert Null können weggelassen werden, aber mindestens eine Komponente sollte vorhanden sein (auch wenn sie den Wert Null hat, in diesem Fall ist die Dauer null). T
-
Ein literales Zeichen
T
odert
, das den Datumsteil vom Zeitteil trennt und nur vorhanden sein sollte, wenn mindestens eine Komponente nach ihm vorhanden ist.
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 Vorzeichenzeichen am Anfang des Strings und erlaubt die Kombination von Wochen mit anderen Einheiten. Daher beachten Sie, dass, wenn Ihre Dauer zu einem String wie P3W1D
, +P1M
oder -P1M
serialisiert wird, andere Programme sie möglicherweise nicht akzeptieren.
Beim Serialisieren respektiert die Ausgabe die gespeicherten Komponenten so weit wie möglich und bewahrt unausgeglichene Komponenten. Subsekunden-Komponenten werden jedoch als einzelne Bruchteile von Sekunden serialisiert, sodass ihre genauen Werte, wenn unausgeglichen, möglicherweise verloren gehen. Das Pluszeichen wird bei positiven Dauern weggelassen. Die Null-Dauer wird immer als PT0S
serialisiert.
Kalenderdauern
Eine Kalenderdauer ist eine, die eine der Kalendereinheiten: Wochen, Monate und Jahre enthält. Eine Nicht-Kalenderdauer ist portabel und kann ohne jegliche Kalenderinformationen an Datum-/Uhrzeitarithmetik teilnehmen, da sie eindeutig eine feste Zeitmenge repräsentiert. Eine Kalenderdauer ist jedoch nicht portabel, da die Anzahl der Tage in einem Monat oder Jahr vom Kalendersystem und dem Referenzzeitpunkt abhängt. Daher führt der Versuch, jegliche arithmetische Operation auf Kalenderdauern durchzuführen, zu einem Fehler, da Dauern selbst keinen Kalender verfolgen. Zum Beispiel, wenn wir im Mai des gregorianischen Kalenders sind, dann ist "1 Monat" "31 Tage", aber wenn wir im April sind, dann wird "1 Monat" zu "30 Tagen". Um Kalenderdauern zu addieren 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: for calendar duration arithmetic, use date arithmetic relative to a starting point
const startingPoint = Temporal.PlainDate.from("2021-01-01"); // ISO 8601 calendar
startingPoint.add(dur1).add(dur2).since(startingPoint); // "P396D"
Andere Operationen, round()
, total()
und compare()
, nehmen eine relativeTo
-Option, um die notwendigen Kalender- und Referenzzeitinformationen bereitzustellen. Diese Option kann ein Temporal.PlainDate
, Temporal.PlainDateTime
, Temporal.ZonedDateTime
oder anderweitig ein Objekt oder String sein, das konvertierbar ist unter Verwendung von Temporal.ZonedDateTime.from()
(wenn die timeZone
-Option bereitgestellt wird oder der String Zeitzonenanmerkungen enthält) oder Temporal.PlainDate.from()
.
Beachten Sie, dass die Umwandlung von Tagen
zu Stunden
auch technisch mehrdeutig ist, da die Länge eines Tages durch Offsetänderungen wie die Sommerzeit variieren kann. Sie können ein zonenbezogenes relativeTo
bereitstellen, um diese Änderungen zu berücksichtigen; andernfalls werden Tage mit 24 Stunden angenommen.
Dauerabgleich
Es gibt viele Möglichkeiten, dieselbe Dauer darzustellen: zum Beispiel sind "1 Minute und 30 Sekunden" und "90 Sekunden" gleichwertig. Abhängig vom Kontext ist jedoch eine Darstellung möglicherweise angemessener 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, usw. sein. Wenn eine Komponente ihren optimalen Bereich überschreitet, kann der Überschuss in die nächsthöhere 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, daher wird in diesem Fall ein Kalender benötigt. Beachten Sie auch, dass standardmäßig Tage
direkt in Monate
übertragen werden; die Wocheneinheit wird nur übertragen, wenn explizit angefordert. Wenn wir so viel wie möglich übertragen, wird das endgültige Ergebnis, bei dem alle Komponenten innerhalb ihres optimalen Bereichs liegen, als "ausgeglichene" Dauer bezeichnet. Unaustarierte Dauern kommen in der Regel in Form von "oben schwer" vor, 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 die Form "oben schwer" aus, bis zur Option largestUnit
. Mit einer manuellen largestUnit
-Option, die groß genug ist, können Sie die Dauer vollständig ausbalancieren. Ebenso balancieren die add()
- und subtract()
-Methoden die Ertragsdauer zur größten Einheit der Eingabedauern aus.
Beachten Sie, dass das ISO 8601-Dauerformat Subsekundenkomponenten als eine einzige Bruchzahl darstellt, so dass es nicht möglich ist, unaustarierte Subsekundenkomponenten während Serialisierung unter Verwendung des Standardformats zu bewahren. Zum Beispiel wird "1000 Millisekunden" als "PT1S"
serialisiert und dann als "1 Sekunde" deserialisiert. Wenn Sie die Größenordnungen der Subsekundenkomponenten bewahren müssen, müssen Sie sie manuell als ein JSON-Objekt serialisieren (da standardmäßig die toJSON()
-Methode die Dauer im ISO 8601-Format serialisiert).
Daurenvorzeichen
Da eine Dauer ein Unterschied zwischen zwei Zeitpunkten ist, kann sie positiv, negativ oder null sein. Zum Beispiel, wenn Sie Ereigniszeiten in relativen Zeiten darstellen, können negative Dauern Ereignisse in der Vergangenheit und positive Dauern solche in der Zukunft repräsentieren. In unserer Darstellung mit einer Kombination von Zeitkomponenten wird das Vorzeichen in jeder Komponente gespeichert: eine negative Dauer hat immer alle Komponenten negativ (oder null), und eine positive Dauer hat immer alle Komponenten positiv (oder null). Das Erstellen einer Dauer mit Komponenten gemischter Vorzeichen ist ungültig und wird vom Konstruktor oder der with()
-Methode abgelehnt. Die Methoden add()
und subtract()
balancieren die Ergebnisdauer, um gemischte Vorzeichen zu vermeiden.
Konstruktor
Temporal.Duration()
Experimentell-
Erstellt ein neues
Temporal.Duration
-Objekt, indem die zugrunde liegenden Daten direkt bereitgestellt werden.
Statische Methoden
Temporal.Duration.compare()
Experimentell-
Gibt eine Zahl (-1, 0 oder 1) zurück, die anzeigt, 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 booleschen Wert zurück, der
true
ist, wenn diese Dauer eine Null-Dauer repräsentiert, undfalse
ansonsten. Entsprichtduration.sign === 0
. Temporal.Duration.prototype.constructor
-
Die Konstruktorfunktion, die das Instanzobjekt erstellt hat. Für
Temporal.Duration
-Instanzen ist der Anfangswert derTemporal.Duration()
-Konstruktor. Temporal.Duration.prototype.days
Experimentell-
Gibt eine ganze Zahl zurück, die die Anzahl der Tage in der Dauer repräsentiert.
Temporal.Duration.prototype.hours
Experimentell-
Gibt eine ganze Zahl zurück, die die Anzahl der Stunden in der Dauer repräsentiert.
Temporal.Duration.prototype.microseconds
Experimentell-
Gibt eine ganze Zahl zurück, die die Anzahl der Mikrosekunden in der Dauer repräsentiert.
Temporal.Duration.prototype.milliseconds
Experimentell-
Gibt eine ganze Zahl zurück, die die Anzahl der Millisekunden in der Dauer repräsentiert.
Temporal.Duration.prototype.minutes
Experimentell-
Gibt eine ganze Zahl zurück, die die Anzahl der Minuten in der Dauer repräsentiert.
Temporal.Duration.prototype.months
Experimentell-
Gibt eine ganze Zahl zurück, die die Anzahl der Monate in der Dauer repräsentiert.
Temporal.Duration.prototype.nanoseconds
Experimentell-
Gibt eine ganze Zahl zurück, die die Anzahl der Nanosekunden in der Dauer repräsentiert.
Temporal.Duration.prototype.seconds
Experimentell-
Gibt eine ganze Zahl zurück, die die Anzahl der Sekunden in der Dauer repräsentiert.
Temporal.Duration.prototype.sign
Experimentell-
Gibt
1
zurück, wenn diese Dauer positiv ist,-1
wenn negativ, und0
wenn null. Temporal.Duration.prototype.weeks
Experimentell-
Gibt eine ganze Zahl zurück, die die Anzahl der Wochen in der Dauer repräsentiert.
Temporal.Duration.prototype.years
Experimentell-
Gibt eine ganze Zahl zurück, die die Anzahl der Jahre in der Dauer repräsentiert.
Temporal.Duration.prototype[Symbol.toStringTag]
-
Der Anfangswert 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 Absolutwert 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 zurück (in einer Form konvertierbar durchTemporal.Duration.from()
). Das Ergebnis ist ausgeglichen. Temporal.Duration.prototype.negated()
Experimentell-
Gibt ein neues
Temporal.Duration
-Objekt mit dem negierten 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 auf die gegebene kleinste Einheit gerundeten Dauer und/oder ausgeglichen zur gegebenen größten Einheit zurück. Temporal.Duration.prototype.subtract()
Experimentell-
Gibt ein neues
Temporal.Duration
-Objekt mit dem Unterschied zwischen dieser Dauer und einer gegebenen Dauer zurück (in einer Form konvertierbar durchTemporal.Duration.from()
). Entspricht dem Hinzufügen des negierten Wertes der anderen Dauer. Temporal.Duration.prototype.toJSON()
Experimentell-
Gibt einen String zurück, der diese Dauer in demselben ISO 8601-Format darstellt, wie beim Aufrufen von
toString()
. Soll implizit durchJSON.stringify()
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 angegebenen Einheit repräsentiert.
Temporal.Duration.prototype.valueOf()
Experimentell-
Wirft einen
TypeError
, der verhindert, dassTemporal.Duration
-Instanzen implizit in primitive Werte konvertiert 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 durch neue Werte ersetzten Feldern repräsentiert.
Spezifikationen
Specification |
---|
Temporal proposal # sec-temporal-duration-objects |