Temporal.Duration
Disponibilité limitée
Cette fonctionnalité n'est pas Compatible car elle ne fonctionne pas dans certains des navigateurs les plus utilisés.
L'objet Temporal.Duration représente une différence entre deux points dans le temps, qui peut être utilisée dans les calculs de date/heure. Il est fondamentalement représenté comme une combinaison de valeurs d'années, de mois, de semaines, de jours, d'heures, de minutes, de secondes, de millisecondes, de microsecondes et de nanosecondes.
Description
>Format de durée ISO 8601
Les objets Duration peuvent être sérialisés et analysés en utilisant le format de durée ISO 8601 (avec quelques extensions définies par ECMAScript). La chaîne de caractères a la forme suivante (les espaces ne sont présents que pour la lisibilité et ne doivent pas être présents dans la chaîne de caractères réelle) :
±P nY nM nW nD T nH nM nS
±Facultatif-
Un caractère de signe optionnel (
+ou-), qui représente une durée positive ou négative. Par défaut, la durée est positive. P-
Un caractère littéral
Poupqui signifie « période ». nY,nM,nW,nD,nH,nM,nS-
Un nombre suivi d'un caractère littéral, qui représente le nombre d'années (
Y), de mois (M), de semaines (W), de jours (D), d'heures (H), de minutes (M) ou de secondes (S), respectivement. Tous les composants existants sauf le dernier doivent être des entiers. Le dernier composant, s'il s'agit d'un composant temporel (heures, minutes ou secondes), peut avoir une partie fractionnaire de 1 à 9 chiffres, précédée d'un point ou d'une virgule, commePT0.0021SouPT1.1H. Les composants nuls peuvent être omis, mais au moins un composant doit être présent (même s'il a la valeur zéro, auquel cas la durée est nulle). T-
Un caractère littéral
Toutqui sépare la partie date de la partie temps, qui doit être présent si et seulement s'il y a au moins un composant après lui.
Voici quelques exemples :
| ISO 8601 | Signification |
|---|---|
P1Y1M1DT1H1M1.1S |
1 année, 1 mois, 1 jour, 1 heure, 1 minute, 1 seconde et 100 millisecondes |
P40D |
40 jours |
P1Y1D |
1 année et 1 jour |
P3DT4H59M |
3 jours, 4 heures et 59 minutes |
PT2H30M |
2 heures et 30 minutes |
P1M |
1 mois |
PT1M |
1 minute |
PT0.0021S |
2,1 millisecondes (2 millisecondes et 100 microsecondes) |
PT0S |
zéro (représentation canonique) |
P0D |
zéro |
Note :
Selon la norme ISO 8601-1, les semaines ne sont pas autorisées à apparaître avec d'autres unités, et les durées ne peuvent être que positives. En tant qu'extensions à la norme, ISO 8601-2, utilisée par Temporal, permet un caractère de signe au début de la chaîne de caractères et permet de combiner les semaines avec d'autres unités. Par conséquent, si votre durée est sérialisée dans une chaîne de caractères comme P3W1D, +P1M ou -P1M, notez que d'autres programmes peuvent ne pas l'accepter.
Lors de la sérialisation, la sortie respecte autant que possible les composants stockés, en préservant les composants déséquilibrés. Cependant, les composants de sous-seconde sont sérialisés en une seule seconde fractionnaire, donc leurs valeurs précises, si elles sont déséquilibrées, peuvent être perdues. Le signe plus est omis pour les durées positives. La durée zéro est toujours sérialisée comme PT0S.
Durées calendaires
Une durée calendaire est une durée qui contient l'une des unités calendaires : semaines, mois et années. Une durée non calendaire est portable et peut participer à des calculs de date/heure sans aucune information de calendrier, car elle représente de manière non ambiguë une quantité de temps fixe. Cependant, une durée calendaire n'est pas portable car le nombre de jours dans un mois ou une année dépend du système de calendrier et du point de référence temporel. Par conséquent, tenter d'effectuer une opération arithmétique sur une durée calendaire génère une erreur, car les durées ne suivent pas elles-mêmes un calendrier. Par exemple, si nous sommes en mai du calendrier grégorien, alors « 1 mois » correspond à « 31 jours », mais si nous sommes en avril, alors « 1 mois » devient « 30 jours ». Pour ajouter ou soustraire des durées calendaires, vous devez les ajouter aux dates à la place :
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"); // calendrier ISO 8601
startingPoint.add(dur1).add(dur2).since(startingPoint); // "P396D"
D'autres opérations, round(), total(), et compare(), prennent une option relativeTo pour fournir les informations nécessaires sur le calendrier et le point de référence temporel. Cette option peut être un Temporal.PlainDate, Temporal.PlainDateTime, Temporal.ZonedDateTime, ou sinon un objet ou une chaîne de caractères convertible en utilisant Temporal.ZonedDateTime.from() (si l'option timeZone est fournie ou si la chaîne de caractères contient une annotation de fuseau horaire) ou Temporal.PlainDate.from().
Notez que la conversion de days en hours est également techniquement ambiguë, car la durée d'un jour peut varier en raison des changements de décalage, tels que l'heure d'été. Vous pouvez fournir un relativeTo zoné pour tenir compte de ces changements ; sinon, des jours de 24 heures sont supposés.
Équilibrage des durées
Il existe de nombreuses façons de représenter la même durée : par exemple, « 1 minute et 30 secondes » et « 90 secondes » sont équivalentes. Cependant, selon le contexte, une représentation peut être plus appropriée qu'une autre. Par conséquent, en général, l'objet Duration préserve autant que possible les valeurs d'entrée, afin que lorsqu'elle est formatée, elle s'affiche comme prévu.
Chaque composant d'une durée a sa plage optimale ; les heures doivent être de 0 à 23, les minutes de 0 à 59, et ainsi de suite. Lorsque un composant dépasse sa plage optimale, l'excédent peut être « reporté » dans le composant suivant plus grand. Pour effectuer ce report, nous devons répondre à la question « combien de X y a-t-il dans un Y ? », ce qui est une question compliquée pour les unités calendaires, donc dans ce cas, un calendrier est nécessaire. Notez également que par défaut, les jours sont directement reportés dans les mois ; l'unité semaines n'est reportée que si elle est explicitement demandée. Si nous reportons autant que possible, le résultat final où tous les composants sont dans leur plage optimale est appelé une durée « équilibrée ». Les durées déséquilibrées apparaissent généralement sous une forme « déséquilibré vers le haut », où la plus grande unité est déséquilibrée (par exemple, « 27 heures et 30 minutes ») ; d'autres formes, comme « 23 heures et 270 minutes », sont rarement vues.
La méthode round() équilibre toujours la durée dans la forme « déséquilibré vers le haut », jusqu'à l'option largestUnit. Avec une option largestUnit manuelle suffisamment grande, vous pouvez équilibrer complètement la durée. De même, les méthodes add() et subtract() équilibrent la durée résultante par rapport à la plus grande unité des durées d'entrée.
Notez que, comme le format de durée ISO 8601 représente les composantes inférieures à la seconde sous la forme d'un seul nombre fractionnaire, il n'est pas possible de conserver les composantes inférieures à la seconde non équilibrées lors de la sérialisation avec le format par défaut. Par exemple, « 1000 millisecondes » est sérialisé sous la forme "PT1S", puis désérialisé en « 1 seconde ». Si vous devez conserver les magnitudes des composantes inférieures à la seconde, vous devez les sérialiser manuellement en tant qu'objet JSON à la place (car par défaut, la méthode toJSON() sérialise la durée au format ISO 8601).
Signe de la durée
Comme une durée est une différence entre deux points dans le temps, elle peut être positive, négative ou nulle. Par exemple, si vous affichez les heures des événements en temps relatif, les durées négatives peuvent représenter des événements passés, et les durées positives des événements futurs. Dans notre représentation utilisant une combinaison de composants temporels, le signe est stocké dans chaque composant : une durée négative a toujours tous les composants négatifs (ou nuls), et une durée positive a toujours tous les composants positifs (ou nuls). Construire une durée avec des composants de signes mixtes est invalide et sera rejeté par le constructeur ou la méthode with(). Les méthodes add() et subtract() équilibreront la durée résultante pour éviter les signes mixtes.
Constructeur
Temporal.Duration()-
Crée un nouvel objet
Temporal.Durationen fournissant directement les données sous-jacentes.
Méthodes statiques
Temporal.Duration.compare()-
Retourne un nombre (-1, 0 ou 1) indiquant si la première durée est plus courte, égale ou plus longue que la deuxième durée.
Temporal.Duration.from()-
Crée un nouvel objet
Temporal.Durationà partir d'un autre objetTemporal.Duration, d'un objet avec des propriétés de durée ou d'une chaîne de caractères ISO 8601.
Propriétés d'instance
Ces propriétés sont définies sur Temporal.Duration.prototype et partagées par toutes les instances de Temporal.Duration.
Temporal.Duration.prototype.blank-
Retourne un booléen qui est
truesi cette durée représente une durée nulle, etfalsesinon. Équivaut àduration.sign === 0. Temporal.Duration.prototype.constructor-
La fonction constructeur qui a créé l'objet instance. Pour les instances de
Temporal.Duration, la valeur initiale est le constructeurTemporal.Duration(). Temporal.Duration.prototype.days-
Retourne un entier représentant le nombre de jours dans la durée.
Temporal.Duration.prototype.hours-
Retourne un entier représentant le nombre d'heures dans la durée.
Temporal.Duration.prototype.microseconds-
Retourne un entier représentant le nombre de microsecondes dans la durée.
Temporal.Duration.prototype.milliseconds-
Retourne un entier représentant le nombre de millisecondes dans la durée.
Temporal.Duration.prototype.minutes-
Retourne un entier représentant le nombre de minutes dans la durée.
Temporal.Duration.prototype.months-
Retourne un entier représentant le nombre de mois dans la durée.
Temporal.Duration.prototype.nanoseconds-
Retourne un entier représentant le nombre de nanosecondes dans la durée.
Temporal.Duration.prototype.seconds-
Retourne un entier représentant le nombre de secondes dans la durée.
Temporal.Duration.prototype.sign-
Retourne
1si cette durée est positive,-1si elle est négative, et0si elle est nulle. Temporal.Duration.prototype.weeks-
Retourne un entier représentant le nombre de semaines dans la durée.
Temporal.Duration.prototype.years-
Retourne un entier représentant le nombre d'années dans la durée.
Temporal.Duration.prototype[Symbol.toStringTag]-
La valeur initiale de la propriété
[Symbol.toStringTag]est la chaîne de caractères"Temporal.Duration". Cette propriété est utilisée dansObject.prototype.toString().
Méthodes d'instance
Temporal.Duration.prototype.abs()-
Retourne un nouvel objet
Temporal.Durationavec la valeur absolue de cette durée (tous les champs conservent la même magnitude, mais le signe devient positif). Temporal.Duration.prototype.add()-
Retourne un nouvel objet
Temporal.Durationavec la somme de cette durée et d'une durée donnée (sous une forme convertible parTemporal.Duration.from()). Le résultat est équilibré. Temporal.Duration.prototype.negated()-
Retourne un nouvel objet
Temporal.Durationavec la valeur négative de cette durée (tous les champs conservent la même magnitude, mais le signe est inversé). Temporal.Duration.prototype.round()-
Retourne un nouvel objet
Temporal.Durationavec la durée arrondie à l'unité la plus petite donnée et/ou équilibrée à l'unité la plus grande donnée. Temporal.Duration.prototype.subtract()-
Retourne un nouvel objet
Temporal.Durationavec la différence entre cette durée et une durée donnée (sous une forme convertible parTemporal.Duration.from()). Équivaut à ajouter la valeur négative de l'autre durée. Temporal.Duration.prototype.toJSON()-
Retourne une chaîne de caractères représentant cette durée dans le même format ISO 8601 que l'appel de
toString(). Destiné à être appelé implicitement parJSON.stringify(). Temporal.Duration.prototype.toLocaleString()-
Retourne une chaîne de caractères avec une représentation sensible à la langue de cette durée. Dans les implémentations avec le support de l'API
Intl.DurationFormat, cette méthode délègue àIntl.DurationFormat. Temporal.Duration.prototype.toString()-
Retourne une chaîne de caractères représentant cette durée dans le format ISO 8601.
Temporal.Duration.prototype.total()-
Retourne un nombre représentant la durée totale dans l'unité donnée.
Temporal.Duration.prototype.valueOf()-
Lève une
TypeError, ce qui empêche les instances deTemporal.Durationd'être converties implicitement en primitives lorsqu'elles sont utilisées dans des opérations arithmétiques ou de comparaison. Temporal.Duration.prototype.with()-
Retourne un nouvel objet
Temporal.Durationreprésentant cette durée avec certains champs remplacés par de nouvelles valeurs.
Spécifications
| Spécification |
|---|
| Temporal> # sec-temporal-duration-objects> |
Compatibilité des navigateurs
Voir aussi
- L'objet
Temporal