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-/Zeit-Arithmetik 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 im ISO 8601 Dauerformat (mit einigen von ECMAScript spezifizierten Erweiterungen) serialisiert und geparst werden. Der String hat die folgende Form (Leerzeichen sind nur zur besseren 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 positive oder negative Dauer darstellt. Standard ist positiv. P
-
Ein wörtliches Zeichen
P
oderp
, das für "Periode" steht. nY
,nM
,nW
,nD
,nH
,nM
,nS
-
Eine Zahl gefolgt von einem wörtlichen Zeichen, das die Anzahl von Jahren (
Y
), Monaten (M
), Wochen (W
), Tagen (D
), Stunden (H
), Minuten (M
) oder Sekunden (S
) repräsentiert. Alle außer der letzten vorhandenen Komponente müssen eine ganze Zahl sein. Die letzte Komponente, wenn es eine Zeitkomponente ist (Stunden, Minuten oder Sekunden), kann einen Bruchteil von 1 bis 9 Ziffern haben, eingeleitet durch einen Punkt oder ein Komma, wiePT0.0021S
oderPT1.1H
. Jegliche Null-Komponenten dürfen weggelassen werden, aber mindestens eine Komponente sollte vorhanden sein (selbst wenn sie den Wert Null hat, in diesem Fall ist die Dauer null). T
-
Ein wörtliches Zeichen
T
odert
, das den Datenteil vom Zeitteil trennt, sollte vorhanden sein, wenn und nur wenn mindestens eine Komponente danach 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:
Nach dem ISO 8601-1 Standard dürfen Wochen nicht zusammen mit anderen Einheiten erscheinen, und Dauerangaben dürfen nur positiv sein. Als Erweiterungen zum Standard erlaubt ISO 8601-2, welches Temporal verwendet, ein Vorzeichen am Anfang des Strings und das Kombinieren von Wochen mit anderen Einheiten. Daher beachten Sie, dass, wenn Ihre Dauer zu einem String wie P3W1D
, +P1M
oder -P1M
serialisiert wird, andere Programme dies möglicherweise nicht akzeptieren.
Bei der Serialisierung respektiert die Ausgabe die gespeicherten Komponenten so weit wie möglich und bewahrt unbalancierte Komponenten. Subsekunden-Komponenten werden jedoch als eine einzelne Bruchsekunde serialisiert, sodass ihre genauen Werte, falls unbalanciert, verloren gehen können. Das Pluszeichen wird für positive Dauern weggelassen. Die Null-Dauer wird immer als PT0S
serialisiert.
Kalenderdauer
Eine Kalenderdauer ist eine, die eine der Kalendereinheiten enthält: Wochen, Monate und Jahre. Eine nicht-kalendergebundene Dauer ist portabel und kann ohne Kalenderinformationen an der Datums-/Zeit-Arithmetik teilnehmen, da sie zweifelsfrei eine feste Zeitspanne darstellt. 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, eine 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, ist "1 Monat" "31 Tage", aber wenn wir im April sind, 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()
, 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/der unter Verwendung von Temporal.ZonedDateTime.from()
konvertierbar ist (wenn die timeZone
Option angegeben ist oder der String eine Zeitzonenanmerkung enthält) oder Temporal.PlainDate.from()
.
Beachten Sie, dass die Konvertierung von days
zu hours
technisch ebenfalls mehrdeutig ist, da die Länge eines Tages aufgrund von Offset-Änderungen, wie Sommerzeit, variieren kann. Sie können eine zonierte relativeTo
angeben, um diese Änderungen zu berücksichtigen; Andernfalls werden 24-Stunden-Tage angenommen.
Dauerbalancierung
Es gibt viele Möglichkeiten, dieselbe Dauer darzustellen: Zum Beispiel sind "1 Minute und 30 Sekunden" und "90 Sekunden" äquivalent. Je nach Kontext kann jedoch eine Darstellung geeigneter sein als die andere. Daher bewahrt das Duration
Objekt im Allgemeinen die Eingabewerte so weit wie möglich, sodass es bei der Formatierung so angezeigt wird, wie Sie es erwarten.
Jede Komponente einer Dauer hat ihren optimalen Bereich; Stunden sollten von 0 bis 23 sein, Minuten von 0 bis 59 und so weiter. Wenn eine Komponente ihren optimalen Bereich überschreitet, könnte der Überlauf in die nächste größere Komponente "getragen" 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, sodass in diesem Fall ein Kalender benötigt wird. Beachten Sie auch, dass standardmäßig days
direkt in months
getragen werden; die Wochen-Einheit wird nur getragen, wenn explizit nachgefragt. Wenn wir so viel wie möglich übertragen, dann nennt sich das endgültige Ergebnis, bei dem alle Komponenten innerhalb ihres optimalen Bereichs liegen, eine "balancierte" Dauer. Unausgewogene Dauern kommen normalerweise in der "kopflastigen" Form, wo die größte Einheit unausgeglichen ist (z.B. "27 Stunden und 30 Minuten"); andere Formen, wie "23 Stunden und 270 Minuten", sind selten.
Die round()
Methode balanciert die Dauer immer in die "kopflastige" Form, bis zur largestUnit
Option. Mit einer manuell großen largestUnit
Option können Sie die Dauer vollständig ausgleichen. Ebenso balancieren die add()
und subtract()
Methoden die Resultatdauer zur größten Einheit der Eingabedauern.
Beachten Sie, dass das ISO 8601 Dauerformat, weil es Untersekunden-Komponenten als eine einzige Bruchzahl darstellt, nicht in der Lage ist, unausgeglichene Untersekunden-Komponenten während der Serialisierung im Standardformat zu bewahren. Zum Beispiel wird "1000 Millisekunden" als "PT1S"
serialisiert und dann als "1 Sekunde" deserialisiert. Wenn Sie die Magnituden der Untersekunden-Komponenten bewahren müssen, müssen Sie sie manuell als JSON-Objekt serialisieren (weil die toJSON()
Methode standardmäßig die Dauer im ISO 8601-Format serialisiert).
Vorzeichen der Dauer
Da eine Dauer ein Unterschied zwischen zwei Zeitpunkten ist, kann sie positiv, negativ oder null sein. Zum Beispiel, wenn Sie Ereigniszeiten in relativer Zeit anzeigen, können negative Dauern Ereignisse in der Vergangenheit und positive Dauern solche in der Zukunft darstellen. In unserer Darstellung durch eine 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 Konstruieren einer Dauer mit Komponenten gemischter Vorzeichen ist ungültig und wird vom Konstruktor oder der with()
Methode abgelehnt. Die add()
und subtract()
Methoden 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 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 Dauer-Eigenschaften oder einem ISO 8601 String.
Instanzeigenschaften
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 darstellt, undfalse
andernfalls. Entsprichtduration.sign === 0
. Temporal.Duration.prototype.constructor
-
Die Konstrukturfunktion, 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.
Instanzmethoden
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, die durchTemporal.Duration.from()
konvertierbar ist). Das Ergebnis ist balanciert. 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 und/oder zur gegebenen größten Einheit balancierten Dauer 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, die durchTemporal.Duration.from()
konvertierbar ist). Entspricht addieren des negierten Wertes der anderen Dauer. Temporal.Duration.prototype.toJSON()
Experimentell-
Gibt einen String zurück, der diese Dauer im selben ISO 8601 Format darstellt, wie es durch den Aufruf von
toString()
erfolgt. Soll implizit durchJSON.stringify()
aufgerufen werden. Temporal.Duration.prototype.toLocaleString()
Experimentell-
Gibt eine sprachensensitive Zeichendarstellung 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 Gesamtanzahl der Dauer in der gegebenen Einheit repräsentiert.
Temporal.Duration.prototype.valueOf()
Experimentell-
Wirft einen
TypeError
, der verhindert, dassTemporal.Duration
Instanzen implizit in primitive Typen 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 Feldern darstellt, die durch neue Werte ersetzt wurden.
Spezifikationen
Specification |
---|
Temporal # sec-temporal-duration-objects |