Temporal.ZonedDateTime
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.ZonedDateTime
-Objekt stellt ein Datum und eine Uhrzeit mit einer Zeitzone dar. Es ist grundsätzlich als eine Kombination aus einem Sofortbild, einer Zeitzone und einem Kalendersystem dargestellt.
Beschreibung
Ein ZonedDateTime
fungiert als Brücke zwischen einer exakten Zeit und einer Wand-Uhr-Zeit: Es repräsentiert gleichzeitig einen Moment in der Geschichte (wie ein Temporal.Instant
) und eine lokale, an der Wand ablesbare Zeit (wie ein Temporal.PlainDateTime
). Dies geschieht, indem der Moment, die Zeitzone und das Kalendersystem gespeichert werden. Die Zeitzone wird verwendet, um zwischen dem Moment und der lokalen Zeit zu konvertieren, und das Kalendersystem wird verwendet, um die lokale Zeit zu interpretieren.
ZonedDateTime
ist die einzige Temporal
-Klasse, die eine Zeitzone berücksichtigt. Das Hinzufügen einer Zeitzone führt dazu, dass ZonedDateTime
-Objekte bedeutende Verhaltensunterschiede zu Temporal.PlainDateTime
-Objekten aufweisen. Insbesondere kann man nicht mehr davon ausgehen, dass "die Zeit 1 Minute später" jeden Tag gleich ist oder dass ein Tag 24 Stunden hat. Im schlimmsten Fall kann ein ganzer Tag im lokalen Kalender fehlen. Unten bieten wir einen kurzen Überblick über Zeitzonen und -versätze sowie deren Auswirkungen auf die Umwandlung zwischen UTC-Zeit und lokaler Zeit.
Zeitzonen und Versätze
Alle Zeiten in JavaScript haben einen goldenen Standard: die UTC-Zeit, die kontinuierlich und gleichmäßig fortschreitet, während die physische Zeit fortschreitet. Im Gegensatz dazu sind Benutzer mehr an ihrer lokalen Zeit interessiert, was die Zeit ist, die sie auf ihren Kalendern und Uhren ablesen. Der Prozess der Umwandlung zwischen UTC-Zeit und lokaler Zeit beinhaltet einen Zeitzonen-Offset, der wie folgt berechnet wird:
local time = UTC time + offset
Zum Beispiel, wenn die UTC-Zeit 1970-01-01T00:00:00 ist und der Versatz "-05:00" beträgt, dann ist die lokale Zeit:
1970-01-01T00:00:00 + -05:00 = 1969-12-31T19:00:00
Durch das Anhängen dieses lokalen Zeitpunkts an den Versatz und das Ausdrücken dieser Zeit als "1969-12-31T19:00:00-05:00" kann sie nun eindeutig als ein bestimmter Moment in der Geschichte verstanden werden.
Um den Versatz zu kennen, benötigen wir zwei Informationen: die Zeitzone und das Sofortbild. Die Zeitzone ist eine Region auf der Erde, in der jederzeit derselbe Versatz verwendet wird. Zwei Uhren in derselben Zeitzone zeigen immer gleichzeitig dieselbe Zeit an, aber der Versatz ist nicht unbedingt konstant: Das bedeutet, dass sich die Zeiten dieser Uhren abrupt ändern können. Dies geschieht häufig während der Zeitumstellung von Sommerzeit, bei der der Versatz zweimal im Jahr um eine Stunde wechselt. Versätze können sich auch aufgrund politischer Änderungen dauerhaft ändern, z. B. durch das Wechseln eines Landes der Zeitzone.
Die Zeitzonen sind in der IANA-Zeitzonen-Datenbank gespeichert. Jede IANA-Zeitzone hat:
- Einen primären Zeitzonen-Bezeichner, der die Zeitzone eindeutig identifiziert. Er bezieht sich normalerweise auf ein geografisches Gebiet, das von einer Stadt verankert wird (z. B.
Europe/Paris
oderAfrica/Kampala
), kann aber auch einzeln versetzte Zeitzonen wieUTC
(ein einheitlicher+00:00
Versatz) oderEtc/GMT+5
(was aus historischen Gründen ein negativer Versatz-05:00
ist) bezeichnen. Aus historischen Gründen ist der primäre Name für die UTC-ZeitzoneUTC
, obwohl es in IANAEtc/UTC
ist. - Eine Zeitzonen-Definition in Form einer Tabelle, die UTC-Datums-/Zeitraumbereiche (einschließlich zukünftiger Bereiche) bestimmten Versätzen zuordnet.
- Null oder mehr nicht-primäre Zeitzonen-Bezeichner, die Aliase für den primären Zeitzonen-Bezeichner sind. Dies sind normalerweise historische Namen, die nicht mehr verwendet werden, aber aus Kompatibilitätsgründen beibehalten werden. Weitere Informationen finden Sie unten.
Als Eingabe werden benannte Bezeichner ohne Berücksichtigung der Groß- und Kleinschreibung abgeglichen. Intern werden sie in ihrer bevorzugten Schreibweise gespeichert, und nicht-primäre Bezeichner werden nicht in ihren primären Bezeichner umgewandelt.
Hinweis:
Wenn Sie den Namen der Zeitzone festlegen, möchten Sie selten, dass er auf "UTC"
gesetzt wird. ZonedDateTime
ist vorgesehen, um Benutzern angezeigt zu werden, aber kein Mensch lebt in der "UTC"-Zeitzone. Wenn Sie die Zeitzone zum Zeitpunkt der Erstellung nicht kennen, aber die an der Wand ablesbare Zeit kennen, verwenden Sie ein Temporal.PlainDateTime
. Wenn Sie das genaue Sofortbild kennen, verwenden Sie ein Temporal.Instant
.
Wenn eine Temporal
-API einen Zeitzonen-Bezeichner akzeptiert, akzeptiert sie zusätzlich zu primären und nicht-primären Zeitzonen-Bezeichnern auch einen Offset-Zeitzonen-Bezeichner, der in derselben Form wie der Offset ist, jedoch ist eine subminute Präzision nicht erlaubt. Zum Beispiel sind +05:30
, -08
, +0600
alle gültige Offset-Bezeichner. Intern werden Offset-Bezeichner im Format ±HH:mm
gespeichert.
Hinweis: Vermeiden Sie die Verwendung von Offset-Bezeichnern, wenn es eine benannte Zeitzone gibt, die Sie stattdessen verwenden können. Auch wenn ein Gebiet stets einen einheitlichen Offset verwendet hat, ist es besser, den benannten Bezeichner zu verwenden, um zukünftige politische Änderungen des Offsets abzusichern.
Wenn ein Gebiet mehrere Offsets verwendet (oder verwendet hat), ist die Verwendung seiner benannten Zeitzone umso wichtiger. Dies liegt daran, dass Temporal.ZonedDateTime
Methoden wie add
oder with
verwenden kann, um neue Instanzen zu einem anderen Moment zu erstellen. Wenn diese abgeleiteten Instanzen einem Moment entsprechen, der einen anderen Offset verwendet (zum Beispiel nach einem Übergang zur Sommerzeit), dann haben Ihre Berechnungen eine falsche lokale Zeit. Die Verwendung einer benannten Zeitzone stellt sicher, dass lokale Daten und Zeiten immer für den richtigen Offset für diesen Moment angepasst werden.
Für mehr Komfort können Sie beim Bereitstellen eines Zeitzonen-Bezeichners für Temporal
-APIs wie Temporal.ZonedDateTime.prototype.withTimeZone()
und die timeZoneId
-Option von Temporal.ZonedDateTime.from()
den Bezeichner in einigen anderen Formen angeben:
- Als eine andere
ZonedDateTime
-Instanz, derentimeZoneId
verwendet wird. - Als eine RFC 9557-Zeichenfolge mit einer Zeitzonen-Annotation, deren Zeitzonen-Bezeichner verwendet wird.
- Als eine ISO 8601 / RFC 3339-Zeichenfolge, die einen Offset enthält, dessen Offset als Offset-Bezeichner verwendet wird; oder wenn
Z
verwendet wird, wird die Zeitzone"UTC"
verwendet. Diese Verwendung wird im Allgemeinen nicht empfohlen, da wie oben diskutiert, Offset-Bezeichner nicht in der Lage sind, sicher andereTemporal.ZonedDateTime
-Instanzen über einen Offset-Übergang hinweg abzuleiten, wie z. B. wenn die Sommerzeit beginnt oder endet. Überlegen Sie stattdessen, nurTemporal.Instant
zu verwenden oder die tatsächliche benannte Zeitzone des Benutzers zu ermitteln.
Die IANA-Zeitzonen-Datenbank ändert sich von Zeit zu Zeit, normalerweise, um neue Zeitzonen hinzuzufügen, die auf politische Änderungen reagieren. In seltenen Fällen werden jedoch IANA-Zeitzonen-Bezeichner umbenannt, um die aktualisierte englische Übersetzung eines Städtenamens abzugleichen oder veraltete Namenskonventionen zu aktualisieren. Zum Beispiel sind hier einige bemerkenswerte Namensänderungen:
Aktueller IANA-Primer-Bezeichner | Alter, nun nicht-primer Bezeichner |
---|---|
America/Argentina/Buenos_Aires |
America/Buenos_Aires |
Asia/Kolkata |
Asia/Calcutta |
Asia/Ho_Chi_Minh |
Asia/Saigon |
Europe/Kyiv |
Europe/Kiev |
Historisch gesehen verursachten diese Umbenennungen Probleme für Programmierer, weil die Unicode CLDR-Datenbank (eine von Browsern verwendete Bibliothek, um Zeitzonen-Bezeichner und Daten zu liefern) aus Stabilitätsgründen nicht den Umbenennungen von IANA folgte. Infolgedessen berichteten einige Browser wie Chrome und Safari CLDRs veraltete Bezeichner, während andere Browser wie Firefox CLDRs Standardeinstellungen überschrieben und die aktuellen primären Bezeichner meldeten.
Mit der Einführung von Temporal wird dieses Verhalten nun stärker standardisiert:
- CLDR-Daten enthalten jetzt ein
"_iana"
-Attribut, das den aktuellsten Bezeichner anzeigt, wenn der ältere, stabile Bezeichner umbenannt wurde. Browser können dieses neue Attribut verwenden, um Anrufern aktuelle Bezeichner bereitzustellen. - Zeitzonen-Bezeichner, die vom Programmierer bereitgestellt werden, werden niemals in einen Alias umgewandelt. Zum Beispiel, wenn der Anrufer
Asia/Calcutta
oderAsia/Kolkata
als Bezeichnereingabe fürTemporal.ZonedDateTime.from()
bereitstellt, dann wird derselbe Bezeichner in der resultierenden Instanz alstimeZoneId
zurückgegeben. Beachten Sie, dass die Groß- und Kleinschreibung der Ausgaben normalisiert wird, um mit IANA übereinzustimmen, sodassASIA/calCuTTa
als Eingabe einetimeZoneId
vonAsia/Calcutta
als Ausgabe erzeugt. - Wenn ein Zeitzonen-Bezeichner nicht von einem Anrufer angegeben, sondern stattdessen vom System selbst bezogen wird (zum Beispiel bei der Verwendung von
Temporal.Now.timeZoneId()
), werden in allen Browsern moderne Bezeichner zurückgegeben. Bei Umbenennungen von Städten gibt es eine Verzögerung von zwei Jahren, bevor diese systembezogenen Bezeichner-APIs den neuen Namen offenlegen, wodurch anderen Komponenten (wie einem Node-Server) Zeit gegeben wird, ihre Kopien der IANA-Datenbank zu aktualisieren, um den neuen Namen zu erkennen.
Beachten Sie, dass die Zuordnung von primären Bezeichnern den Ländercode beibehält: Zum Beispiel zeichnet die IANA-Datenbank Atlantic/Reykjavik
als Alias für Africa/Abidjan
auf, aber weil sie unterschiedlichen Ländern entsprechen (Island bzw. Côte d'Ivoire), werden sie als verschiedene primäre Bezeichner betrachtet.
Diese Standardisierung gilt auch außerhalb von Temporal
. Zum Beispiel wird die timeZone
-Option, die von Intl.DateTimeFormat.prototype.resolvedOptions()
zurückgegeben wird, ebenfalls nie mit einem Alias ersetzt, obwohl Browser traditionell diese Bezeichner vor der Standardisierung durch Temporal kanonisiert haben. Andererseits gibt Intl.Locale.prototype.getTimeZones()
und Intl.supportedValuesOf()
(timeZone
-Option) den aktuellsten Bezeichner zurück, während einige Browser früher den alten, nicht-primary Bezeichner zurückgaben.
RFC 9557-Format
ZonedDateTime
-Objekte können im RFC 9557-Format serialisiert und geparst werden, einer Erweiterung des ISO 8601 / RFC 3339-Formats. Die Zeichenfolge hat die folgende Form (Leerzeichen sind nur zur besseren Lesbarkeit und sollten in der tatsächlichen Zeichenfolge nicht vorhanden sein):
YYYY-MM-DD T HH:mm:ss.sssssssss Z/±HH:mm [time_zone_id] [u-ca=calendar_id]
YYYY
-
Entweder eine vierstellige Zahl oder eine sechsstellige Zahl mit einem
+
oder-
-Zeichen. MM
-
Eine zweistellige Zahl von
01
bis12
. DD
-
Eine zweistellige Zahl von
01
bis31
. DieYYYY
,MM
- undDD
-Komponenten können durch-
oder nichts getrennt werden. T
Optional-
Der Datum-Zeit-Separator, der entweder
T
,t
oder ein Leerzeichen sein kann. Nur vorhanden, wennHH
vorhanden ist. HH
Optional-
Eine zweistellige Zahl von
00
bis23
. Standardwert ist00
. mm
Optional-
Eine zweistellige Zahl von
00
bis59
. Standardwert ist00
. ss.sssssssss
Optional-
Eine zweistellige Zahl von
00
bis59
. Kann optional von einem.
oder,
gefolgt und eins bis neun Ziffern haben. Standardwert ist00
. DieHH
,mm
undss
-Komponenten können durch:
oder nichts getrennt werden. Sie können entweder nurss
oder sowohlss
als auchmm
weglassen, sodass die Zeit eine von drei Formen haben kann:HH
,HH:mm
oderHH:mm:ss.sssssssss
. Z/±HH:mm
Optional-
Entweder der UTC-Bezeichner
Z
oderz
, oder ein Offset von UTC in der Form+
oder-
, gefolgt vom gleichen Format wie die Zeitkomponente. Beachten Sie, dass Subminute-Präzision (:ss.sssssssss
) von anderen Systemen möglicherweise nicht unterstützt wird, und sie wird akzeptiert, aber niemals ausgegeben. Wenn es weggelassen wird, wird der Offset aus dem Zeitzonen-Bezeichner abgeleitet. Wenn er vorhanden ist, muss auch die Zeit angegeben werden.Z
ist nicht dasselbe wie+00:00
: Ersteres bedeutet, dass die Zeit unabhängig vom Zeitzonen-Bezeichner in UTC-Form gegeben wird, während letzteres bedeutet, dass die Zeit in lokaler Zeit angegeben wird, die zufällig UTC+0 ist, und die gegen den Zeitzonen-Bezeichner über dieoffset
-Option validiert wird. [time_zone_id]
-
Ersetzen Sie
time_zone_id
durch den Zeitzonen-Bezeichner (benannt oder als Offset) wie oben beschrieben. Kann ein kritisches Flag haben, indem dem Bezeichner mit!
voransteht: z. B.,[!America/New_York]
. Dieses Flag sagt anderen Systemen im Allgemeinen, dass es nicht ignoriert werden kann, wenn sie es nicht unterstützen. Beachten Sie, dass es fürTemporal.ZonedDateTime.from()
erforderlich ist: Das Weglassen führt zu einemRangeError
. Wenn Sie ISO 8601 / RFC 3339-Zeichenfolgen ohne Zeitzonen-Bezeichner-Anmerkungen analysieren möchten, verwenden Sie stattdessenTemporal.Instant.from()
. [u-ca=calendar_id]
Optional-
Ersetzen Sie
calendar_id
durch den Kalender, der verwendet werden soll. Kann ein kritisches Flag haben, indem dem Schlüssel mit!
voransteht: z. B.,[!u-ca=iso8601]
. Dieses Flag sagt anderen Systemen im Allgemeinen, dass es nicht ignoriert werden kann, wenn sie es nicht unterstützen. DerTemporal
-Parser wirft einen Fehler, wenn die Anmerkungen zwei oder mehr Kalenderanmerkungen enthalten und eine von ihnen kritisch ist. Standardwert ist[u-ca=iso8601]
. Beachten Sie, dass dasYYYY-MM-DD
immer als ISO 8601-Kalenderdatum interpretiert und dann in den angegebenen Kalender umgewandelt wird.
Als Eingabe werden andere Anmerkungen im Format [key=value]
ignoriert, und sie dürfen kein kritisches Flag haben.
Beim Serialisieren können Sie die Bruchteile der Sekunden, ob der Offset/Zeitzonen-ID/Kalender-ID angezeigt wird und ob für die Anmerkungen ein kritisches Flag hinzugefügt wird, konfigurieren.
Mehrdeutigkeit und Lücken von lokaler zu UTC-Zeit
Angesichts einer Zeitzone ist die Umwandlung von UTC- zu lokaler Zeit einfach: Sie erhalten zuerst den Offset mit dem Zeitzonennamen und dem Moment, dann fügen Sie den Offset dem Moment hinzu. Umgekehrt ist es nicht wahr: Die Umwandlung von lokaler zu UTC-Zeit, ohne einen expliziten Offset, ist mehrdeutig, da eine lokale Zeit null, einem oder mehreren UTC-Zeiten entsprechen kann. Betrachten wir die häufigste Ursache: Zeitumstellungen für die Sommerzeit. Nehmen wir New York als Beispiel. Sein Standardoffset ist UTC-5, aber während der Sommerzeit werden alle Uhren um eine Stunde vorgestellt, sodass der Offset UTC-4 beträgt. In den USA treten Übergänge um 2:00 Uhr Ortszeit auf, betrachten Sie daher diese beiden Übergangstage:
UTC-Zeit | New Yorker Zeit |
---|---|
2024-03-10T06:58:00Z | 2024-03-10T01:58:00-05:00 |
2024-03-10T06:59:00Z | 2024-03-10T01:59:00-05:00 |
2024-03-10T07:00:00Z | 2024-03-10T03:00:00-04:00 |
--- | --- |
2024-11-03T05:58:00Z | 2024-11-03T01:58:00-04:00 |
2024-11-03T05:59:00Z | 2024-11-03T01:59:00-04:00 |
2024-11-03T06:00:00Z | 2024-11-03T01:00:00-05:00 |
Wie Sie sehen können, ist im März eine Stunde in der lokalen Zeit verschwunden, und im November haben wir zwei Stunden, die dieselbe Wand-Uhr-Zeit haben. Angenommen, wir haben ein PlainDateTime
gespeichert, der "2024-03-10T02:05:00" angibt, und wir möchten ihn in der America/New_York
Zeitzone interpretieren, es wird keine Zeit geben, die dem entspricht, während ein PlainDateTime
, der "2024-11-03T01:05:00" angibt, zwei unterschiedlichen Momenten entsprechen kann.
Beim Erstellen eines ZonedDateTime
aus einer lokalen Zeit (mit Temporal.ZonedDateTime.from()
, Temporal.ZonedDateTime.prototype.with()
, Temporal.PlainDateTime.prototype.toZonedDateTime()
) ist das Verhalten für Mehrdeutigkeit und Lücken über die disambiguation
-Option konfigurierbar:
earlier
-
Wenn es zwei mögliche Momente gibt, wählen Sie den früheren. Wenn es eine Lücke gibt, gehen Sie zurück um die Lückendauer.
later
-
Wenn es zwei mögliche Momente gibt, wählen Sie den späteren. Wenn es eine Lücke gibt, gehen Sie vorwärts um die Lückendauer.
compatible
(Standard)-
Gleiches Verhalten wie
Date
: Verwenden Sielater
für Lücken undearlier
für Mehrdeutigkeiten. reject
-
Werfen Sie einen
RangeError
, wann immer es eine Mehrdeutigkeit oder eine Lücke gibt.
Es gibt mehrere Fälle, in denen es keine Mehrdeutigkeit gibt, wenn ein ZonedDateTime
erstellt wird:
- Wenn die Zeit im UTC-Format durch den
Z
-Versatz angegeben ist. - Wenn der Versatz explizit bereitgestellt und verwendet wird (siehe unten).
Offset-Mehrdeutigkeit
Wir haben bereits demonstriert, wie Mehrdeutigkeit daraus entsteht, eine lokale Zeit in einer Zeitzone zu interpretieren, ohne einen expliziten Offset anzugeben. Wenn Sie jedoch einen expliziten Offset angeben, entsteht ein weiterer Konflikt: zwischen dem angegebenen Offset und dem Versatz, wie er aus der Zeitzone und der lokalen Zeit berechnet wird. Dies ist ein unvermeidbares Problem in der realen Welt: Wenn Sie eine Zeit in der Zukunft speichern, mit einem erwarteten Offset, dann kann sich vor dieser Zeit die Definition der Zeitzone aufgrund politischer Änderungen ändern. Zum Beispiel, nehmen wir an, im Jahr 2018 haben wir eine Erinnerung um die Zeit 2019-12-23T12:00:00-02:00[America/Sao_Paulo]
gesetzt (was eine Sommerzeit ist; Brasilien befindet sich auf der Südhalbkugel, sodass es im Oktober in die Sommerzeit eintritt und im Februar austritt). Aber bevor diese Zeit kommt, entscheidet Brasilien Anfang 2019, die Sommerzeit nicht mehr zu beachten, sodass der tatsächliche Offset -03:00
wird. Sollte die Erinnerung jetzt immer noch mittags (um die lokale Zeit beizubehalten) oder um 11:00 Uhr (um die genaue Zeit beizubehalten) ausgelöst werden?
Beim Erstellen eines ZonedDateTime
mit Temporal.ZonedDateTime.from()
oder beim Aktualisieren mit der Methode with()
ist das Verhalten bei Offset-Mehrdeutigkeiten über die offset
-Option konfigurierbar:
use
-
Verwenden Sie den Offset, um die genaue Zeit zu berechnen. Diese Option "verwendet" den Offset, um den von der Zeichenfolge repräsentierten Moment zu bestimmen, der derselbe ursprüngliche Moment sein wird, der berechnet wurde, als wir die Zeit gespeichert haben, selbst wenn sich der Offset zu diesem Zeitpunkt geändert hat. Der Zeitzonen-Bezeichner wird danach verwendet, um den (möglicherweise aktualisierten) Offset zu ermitteln und diesen Offset zu verwenden, um die genaue Zeit in lokale Zeit umzuwandeln.
ignore
-
Ignorieren Sie den in der Zeichenfolge angegebenen Offset und berechnen Sie den Offset anhand des Zeitzonen-Bezeichners neu. Diese Option behält die gleiche lokale Zeit bei, wie sie ursprünglich berechnet wurde, als wir die Zeit gespeichert haben, kann jedoch einem anderen Moment entsprechen. Beachten Sie, dass diese Option dieselbe lokale Zeit-Interpretationsmehrdeutigkeit verursachen kann, wie oben gezeigt, die mithilfe der
disambiguation
-Option aufgelöst wird. reject
-
Werfen Sie einen
RangeError
, wenn es einen Konflikt zwischen dem Offset und dem Zeitzonen-Bezeichner gibt. Dies ist die Standardeinstellung fürTemporal.ZonedDateTime.from()
. prefer
-
Verwenden Sie den Offset, wenn er gültig ist, ansonsten berechnen Sie den Offset aus dem Zeitzonen-Bezeichner. Dies ist die Standardeinstellung für
Temporal.ZonedDateTime.prototype.with()
(siehe Methode für mehr Details). Dies unterscheidet sich vonignore
, da im Fall einer lokalen Zeit-Mehrdeutigkeit der Offset verwendet wird, um dies zu lösen, anstatt derdisambiguation
-Option.
Beachten Sie, dass der Z
-Offset nicht +00:00
bedeutet; er wird immer als gültig betrachtet, unabhängig von der Zeitzone. Die Zeit wird als UTC-Zeit interpretiert und der Zeitzonen-Bezeichner wird dann verwendet, um sie in lokale Zeit umzuwandeln. Mit anderen Worten, Z
erzwingt dasselbe Verhalten wie die ignore
-Option und seine Ergebnisse können nie mehrdeutig sein.
Hinweis:
Obwohl Temporal.Instant.from()
auch eine RFC 9557-Zeichenfolge in derselben Form annimmt, gibt es keine Mehrdeutigkeit, da sie immer den Zeitzonen-Bezeichner ignorieren und nur den Offset lesen.
Konstruktor
Temporal.ZonedDateTime()
Experimentell-
Erstellt ein neues
Temporal.ZonedDateTime
-Objekt durch direkte Bereitstellung der zugrunde liegenden Daten.
Statische Methoden
Temporal.ZonedDateTime.compare()
Experimentell-
Gibt eine Zahl (-1, 0 oder 1) zurück, welche angibt, ob die erste Zeit vor, gleich oder nach der zweiten Zeit ist. Entspricht dem Vergleich der
epochNanoseconds
der beiden Zeiten. Temporal.ZonedDateTime.from()
Experimentell-
Erstellt ein neues
Temporal.ZonedDateTime
-Objekt aus einem anderenTemporal.ZonedDateTime
-Objekt, einem Objekt mit Datums-, Uhrzeit- und Zeitzoneneigenschaften oder einer RFC 9557-Zeichenfolge.
Instanzeigenschaften
Diese Eigenschaften sind auf Temporal.ZonedDateTime.prototype
definiert und werden von allen Temporal.ZonedDateTime
-Instanzen gemeinsam genutzt.
Temporal.ZonedDateTime.prototype.calendarId
Experimentell-
Gibt eine Zeichenfolge zurück, die den Kalender repräsentiert, der verwendet wird, um das interne ISO 8601-Datum zu interpretieren.
Temporal.ZonedDateTime.prototype.constructor
-
Die Konstrukturfunktion, die das Instanzobjekt erstellt hat. Für
Temporal.ZonedDateTime
-Instanzen ist der Anfangswert derTemporal.ZonedDateTime()
-Konstruktor. Temporal.ZonedDateTime.prototype.day
Experimentell-
Gibt eine positive ganze Zahl zurück, die den auf einer 1 basierenden Tagesindex des Monats dieses Datums darstellt, der die gleiche Tagesnummer ist, die Sie auf einem Kalender sehen würden. Kalender-abhängig. Beginnt im Allgemeinen bei 1 und ist kontinuierlich, aber nicht immer.
Temporal.ZonedDateTime.prototype.dayOfWeek
Experimentell-
Gibt eine positive ganze Zahl zurück, die den auf einer 1 basierenden Tagesindex der Woche dieses Datums darstellt. Tage in einer Woche werden sequenziell von
1
bisdaysInWeek
nummeriert, wobei jede Zahl ihrem Namen entspricht. Kalender-abhängig. 1 repräsentiert gewöhnlich Montag im Kalender, auch wenn Lokalisierungen, die den Kalender verwenden, einen anderen Tag als den ersten Tag der Woche betrachten könnten (sieheIntl.Locale.prototype.getWeekInfo()
). Temporal.ZonedDateTime.prototype.dayOfYear
Experimentell-
Gibt eine positive ganze Zahl zurück, die den auf einer 1 basierenden Tagesindex des Jahres dieses Datums darstellt. Der erste Tag dieses Jahres ist
1
, und der letzte Tag ist derdaysInYear
. Kalender-abhängig. Temporal.ZonedDateTime.prototype.daysInMonth
Experimentell-
Gibt eine positive ganze Zahl zurück, die die Anzahl der Tage im Monat dieses Datums darstellt. Kalender-abhängig.
Temporal.ZonedDateTime.prototype.daysInWeek
Experimentell-
Gibt eine positive ganze Zahl zurück, die die Anzahl der Tage in der Woche dieses Datums darstellt. Kalender-abhängig. Für den ISO 8601-Kalender sind es immer 7 Tage, aber in anderen Kalendersystemen kann es von Woche zu Woche unterschiedlich sein.
Temporal.ZonedDateTime.prototype.daysInYear
Experimentell-
Gibt eine positive ganze Zahl zurück, die die Anzahl der Tage im Jahr dieses Datums darstellt. Kalender-abhängig. Für den ISO 8601-Kalender sind es 365 Tage, oder 366 in einem Schaltjahr.
Temporal.ZonedDateTime.prototype.epochMilliseconds
Experimentell-
Gibt eine Ganzzahl zurück, die die Anzahl der Millisekunden darstellt, die seit dem Unix-Epoch (Mitternacht, zu Beginn des 1. Januar 1970, UTC) bis zum aktuellen Moment vergangen sind. Entspricht der Teilung von
epochNanoseconds
durch1e6
und dem Runden des Ergebnisses. Temporal.ZonedDateTime.prototype.epochNanoseconds
Experimentell-
Gibt eine
BigInt
zurück, die die Anzahl der Nanosekunden darstellt, die seit dem Unix-Epoch (Mitternacht, zu Beginn des 1. Januar 1970, UTC) bis zum aktuellen Moment vergangen sind. Temporal.ZonedDateTime.prototype.era
Experimentell-
Gibt eine kalender-spezifische, kleingeschriebene Zeichenfolge zurück, die die Ära dieses Datums darstellt, oder
undefined
, wenn der Kalender keine Ären verwendet (z. B. ISO 8601).era
underaYear
identifizieren gemeinsam ein Jahr in einem Kalender eindeutig, genauso wie esyear
tut. Kalender-abhängig. Für den gregorianischen Kalender ist es entweder"gregory"
oder"gregory-inverse"
. Temporal.ZonedDateTime.prototype.eraYear
Experimentell-
Gibt eine nicht negative ganze Zahl zurück, die das Jahr dieses Datums innerhalb der Ära darstellt, oder
undefined
, wenn der Kalender keine Ären verwendet (z. B. ISO 8601). Der Jahresindex beginnt normalerweise bei 1 (häufiger) oder 0, und Jahre in einer Ära können mit der Zeit abnehmen (z. B. Gregorianisch VZ).era
underaYear
identifizieren gemeinsam ein Jahr in einem Kalender eindeutig, genauso wie esyear
tut. Kalender-abhängig. Temporal.ZonedDateTime.prototype.hour
Experimentell-
Gibt eine ganze Zahl von 0 bis 23 zurück, die die Stundenkomponente dieser Zeit darstellt.
Temporal.ZonedDateTime.prototype.hoursInDay
Experimentell-
Gibt eine positive ganze Zahl zurück, die die Anzahl der Stunden im Tag dieses Datums in der Zeitzone darstellt. Es kann mehr oder weniger als 24 sein im Falle von Offset-Änderungen wie der Sommerzeit.
Temporal.ZonedDateTime.prototype.inLeapYear
Experimentell-
Gibt einen boolean zurück, der angibt, ob dieses Datum in einem Schaltjahr liegt. Ein Schaltjahr ist ein Jahr, das mehr Tage hat (aufgrund eines Schalttages oder Schaltmonats) als ein gewöhnliches Jahr. Kalender-abhängig.
Temporal.ZonedDateTime.prototype.microsecond
Experimentell-
Gibt eine ganze Zahl von 0 bis 999 zurück, die die Mikrosekunde (10-6 Sekunde) Komponente dieser Zeit darstellt.
Temporal.ZonedDateTime.prototype.millisecond
Experimentell-
Gibt eine ganze Zahl von 0 bis 999 zurück, die die Millisekunde (10-3 Sekunde) Komponente dieser Zeit darstellt.
Temporal.ZonedDateTime.prototype.minute
Experimentell-
Gibt eine ganze Zahl von 0 bis 59 zurück, die die Minutenkomponente dieser Zeit darstellt.
Temporal.ZonedDateTime.prototype.month
Experimentell-
Gibt eine positive ganze Zahl zurück, die den auf einer 1 basierenden Monatsindex des Jahres dieses Datums darstellt. Der erste Monat dieses Jahres ist
1
, und der letzte Monat istmonthsInYear
. Kalender-abhängig. Beachten Sie, dass im Gegensatz zuDate.prototype.getMonth()
, der Index auf 1 basiert. Wenn der Kalender Schaltmonate hat, dann kann der Monat mit dem gleichenmonthCode
unterschiedlichemonth
-Indizes für verschiedene Jahre haben. Temporal.ZonedDateTime.prototype.monthCode
Experimentell-
Gibt eine kalender-spezifische Zeichenfolge zurück, die den Monat dieses Datums darstellt. Kalender-abhängig. Normalerweise ist es
M
plus eine zweistellige Monatsnummer. Für Schaltmonate ist es der Code des vorherigen Monats, gefolgt vonL
. Wenn der Schaltmonat der erste Monat des Jahres ist, ist der CodeM00L
. Temporal.ZonedDateTime.prototype.monthsInYear
Experimentell-
Gibt eine positive ganze Zahl zurück, die die Anzahl der Monate im Jahr dieses Datums darstellt. Kalender-abhängig. Für den ISO 8601-Kalender beträgt dies immer 12, aber in anderen Kalendersystemen kann dies unterschiedlich sein.
Temporal.ZonedDateTime.prototype.nanosecond
Experimentell-
Gibt eine ganze Zahl von 0 bis 999 zurück, die die Nanosekunde (10-9 Sekunde) Komponente dieser Zeit darstellt.
Temporal.ZonedDateTime.prototype.offset
Experimentell-
Gibt eine Zeichenfolge zurück, die den Versatz darstellt, der verwendet wird, um den internen Moment zu interpretieren, in der Form
±HH:mm
(oder±HH:mm:ss.sssssssss
mit so viel subminute Präzision wie nötig). Temporal.ZonedDateTime.prototype.offsetNanoseconds
Experimentell-
Gibt eine ganze Zahl zurück, die den Versatz darstellt, der verwendet wird, um den internen Moment zu interpretieren, als eine Anzahl von Nanosekunden (positiv oder negativ).
Temporal.ZonedDateTime.prototype.second
Experimentell-
Gibt eine ganze Zahl von 0 bis 59 zurück, die die Sekundenkomponente dieser Zeit darstellt.
Temporal.ZonedDateTime.prototype.timeZoneId
Experimentell-
Gibt eine Zeichenfolge zurück, die den Zeitzonen-Bezeichner darstellt, der verwendet wird, um den internen Moment zu interpretieren. Es verwendet den gleichen String, der beim Erstellen des
Temporal.ZonedDateTime
-Objekts verwendet wurde, entweder ein IANA-Zeitzonenname oder ein fester Offset. Temporal.ZonedDateTime.prototype.weekOfYear
Experimentell-
Gibt eine positive ganze Zahl zurück, die den auf einer 1 basierenden Wochenindex im
yearOfWeek
dieses Datums darstellt, oderundefined
, wenn der Kalender kein gut definiertes Wochensystem hat. Die erste Woche des Jahres ist1
. Kalender-abhängig. Beachten Sie, dass für ISO 8601 die ersten und letzten Tage des Jahres zur letzten Woche des vorherigen Jahres oder zur ersten Woche des nächsten Jahres zählen können. Temporal.ZonedDateTime.prototype.year
Experimentell-
Gibt eine ganze Zahl zurück, die die Anzahl der Jahre dieses Datums relativ zum Beginn eines kalender-spezifischen Epochjahres darstellt. Kalender-abhängig. Normalerweise ist das Jahr 1 entweder das erste Jahr der letzten Ära oder das ISO 8601-Jahr
0001
. Wenn die Epoche in der Mitte des Jahres liegt, hat dieses Jahr denselben Wert vor und nach dem Startdatum der Ära. Temporal.ZonedDateTime.prototype.yearOfWeek
Experimentell-
Gibt eine ganze Zahl zurück, die das Jahr darstellt, das mit der
weekOfYear
dieses Datums gepaart werden soll, oderundefined
, wenn der Kalender kein gut definiertes Wochensystem hat. Kalender-abhängig. Normalerweise ist dies das Jahr des Datums, aber für ISO 8601 können die ersten und letzten Tage des Jahres zur letzten Woche des vorherigen Jahres oder zur ersten Woche des nächsten Jahres gezählt werden, sodass sich dasyearOfWeek
um 1 unterscheiden kann. Temporal.ZonedDateTime.prototype[Symbol.toStringTag]
-
Der Anfangswert der
[Symbol.toStringTag]
Eigenschaft ist die Zeichenfolge"Temporal.ZonedDateTime"
. Diese Eigenschaft wird inObject.prototype.toString()
verwendet.
Instanzmethoden
Temporal.ZonedDateTime.prototype.add()
Experimentell-
Gibt ein neues
Temporal.ZonedDateTime
-Objekt zurück, das diese Datum-Zeit nach vorn verschoben um eine gegebene Dauer (in einer Form, die vonTemporal.Duration.from()
konvertierbar ist) darstellt. Temporal.ZonedDateTime.prototype.equals()
Experimentell-
Gibt
true
zurück, wenn diese Datum-Zeit in Wert zu einer anderen Datum-Zeit gleichwertig ist (in einer Form, die vonTemporal.ZonedDateTime.from()
konvertierbar ist), undfalse
ansonsten. Sie werden sowohl durch ihre Momentwerte, Zeitzonen als auch durch ihre Kalender verglichen, sodass zwei Datum-Zeiten aus verschiedenen Kalendern oder Zeitzonen als gleich durchTemporal.ZonedDateTime.compare()
betrachtet werden können, aber nicht durchequals()
. Temporal.ZonedDateTime.prototype.getTimeZoneTransition()
Experimentell-
Gibt ein
Temporal.ZonedDateTime
-Objekt zurück, das den ersten Moment nach oder vor diesem Moment darstellt, bei dem sich der UTC-Offset der Zeitzone ändert, odernull
, wenn es keinen solchen Übergang gibt. Dies ist nützlich, um die Offset-Regeln einer Zeitzone zu ermitteln, z. B. ihr Sommerzeitmuster. Temporal.ZonedDateTime.prototype.round()
Experimentell-
Gibt ein neues
Temporal.ZonedDateTime
-Objekt zurück, das diese Datum-Zeit, gerundet auf die gegebene Einheit, darstellt. Temporal.ZonedDateTime.prototype.since()
Experimentell-
Gibt ein neues
Temporal.Duration
-Objekt zurück, das die Dauer von einer anderen Datum-Zeit (in einer Form, die vonTemporal.ZonedDateTime.from()
konvertierbar ist) zu dieser Datum-Zeit darstellt. Die Dauer ist positiv, wenn die andere Datum-Zeit vor dieser Datum-Zeit ist und negativ, wenn danach. Temporal.ZonedDateTime.prototype.startOfDay()
Experimentell-
Gibt ein
Temporal.ZonedDateTime
-Objekt zurück, das den ersten Moment dieses Datums in der Zeitzone darstellt. Es hat normalerweise eine Zeit von00:00:00
, aber kann anders sein, wenn Mitternacht aufgrund von Offset-Änderungen nicht existiert, in welchem Fall die erste existierende Zeit zurückgegeben wird. Temporal.ZonedDateTime.prototype.subtract()
Experimentell-
Gibt ein neues
Temporal.ZonedDateTime
-Objekt zurück, das diese Datum-Zeit, rückwärts verschoben um eine gegebene Dauer (in einer Form, die vonTemporal.Duration.from()
konvertierbar ist), darstellt. Temporal.ZonedDateTime.prototype.toInstant()
Experimentell-
Gibt ein neues
Temporal.Instant
-Objekt zurück, das den Moment dieser Datum-Zeit darstellt. Temporal.ZonedDateTime.prototype.toJSON()
Experimentell-
Gibt eine Zeichenfolge zurück, die diese Datum-Zeit im gleichen RFC 9557-Format darstellt wie ein Aufruf von
toString()
. Soll implizit vonJSON.stringify()
aufgerufen werden. Temporal.ZonedDateTime.prototype.toLocaleString()
Experimentell-
Gibt eine Zeichenfolge zurück, die eine sprachsensitiv Darstellung dieser Datum-Zeit bietet.
Temporal.ZonedDateTime.prototype.toPlainDate()
Experimentell-
Gibt ein neues
Temporal.PlainDate
-Objekt zurück, das den Datumsanteil dieser Datum-Zeit darstellt. Temporal.ZonedDateTime.prototype.toPlainDateTime()
Experimentell-
Gibt ein neues
Temporal.PlainDateTime
-Objekt zurück, das den Datum- und Zeitanteil dieser Datum-Zeit darstellt. Nur die Zeitzoneninformationen werden entfernt. Temporal.ZonedDateTime.prototype.toPlainTime()
Experimentell-
Gibt ein neues
Temporal.PlainTime
-Objekt zurück, das den Zeitanteil dieser Datum-Zeit darstellt. Temporal.ZonedDateTime.prototype.toString()
Experimentell-
Gibt eine Zeichenfolge zurück, die diese Datum-Zeit im RFC 9557-Format darstellt.
Temporal.ZonedDateTime.prototype.until()
Experimentell-
Gibt ein neues
Temporal.Duration
-Objekt zurück, das die Dauer von dieser Datum-Zeit zu einer anderen Datum-Zeit (in einer Form, die vonTemporal.ZonedDateTime.from()
konvertierbar ist) darstellt. Die Dauer ist positiv, wenn die andere Datum-Zeit nach dieser Datum-Zeit ist und negativ, wenn davor. Temporal.ZonedDateTime.prototype.valueOf()
Experimentell-
Wirft einen
TypeError
, der verhindert, dassTemporal.ZonedDateTime
-Instanzen implizit in primitive Werte umgewandelt werden wenn sie in arithmetischen oder Vergleichsoperationen verwendet werden. Temporal.ZonedDateTime.prototype.with()
Experimentell-
Gibt ein neues
Temporal.ZonedDateTime
-Objekt zurück, das diese Datum-Zeit mit einigen durch neue Werte ersetzten Feldern darstellt. Temporal.ZonedDateTime.prototype.withCalendar()
Experimentell-
Gibt ein neues
Temporal.ZonedDateTime
-Objekt zurück, das diese Datum-Zeit im neuen Kalendersystem interpretiert darstellt. Temporal.ZonedDateTime.prototype.withPlainTime()
Experimentell-
Gibt ein neues
Temporal.ZonedDateTime
-Objekt zurück, das diese Datum-Zeit darstellt, wobei der Zeitanteil vollständig durch die neue Zeit ersetzt wird (in einer Form, die vonTemporal.PlainTime.from()
konvertierbar ist). Temporal.ZonedDateTime.prototype.withTimeZone()
Experimentell-
Gibt ein neues
Temporal.ZonedDateTime
-Objekt zurück, das denselben Moment darstellt wie diese Datum-Zeit, jedoch in der neuen Zeitzone.
Spezifikationen
Specification |
---|
Temporal proposal # sec-temporal-zoneddatetime-objects |
Browser-Kompatibilität
BCD tables only load in the browser