Temporal.ZonedDateTime
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Das Temporal.ZonedDateTime Objekt repräsentiert ein Datum und eine Zeit mit einer Zeitzone. Es wird grundsätzlich als Kombination eines instants, einer Zeitzone und eines Kalendersystems dargestellt.
Beschreibung
Ein ZonedDateTime dient als Brücke zwischen einer exakten Zeit und einer Uhrzeit: Es repräsentiert gleichzeitig einen Moment in der Geschichte (ähnlich wie ein Temporal.Instant) und eine lokale, kalenderbasierte Zeit (ähnlich wie ein Temporal.PlainDateTime). Es tut dies, indem es den Moment speichert, die Zeitzone und das Kalendersystem. 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 sich Zeitzonen-bewusst verhält. Die Hinzufügung einer Zeitzone führt zu wichtigen Verhaltensunterschieden gegenüber Temporal.PlainDateTime Objekten. 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 könnte ein ganzer Tag im lokalen Kalender fehlen. Unten bieten wir einen kurzen Überblick über Zeitzonen und Offsets und wie sie die Umwandlung zwischen UTC-Zeit und lokaler Zeit beeinflussen.
Zeitzonen und Offsets
Alle Zeiten in JavaScript haben einen goldenen Standard: die UTC-Zeit, die kontinuierlich und gleichmäßig im fortschreitenden physischen Zeitverlauf zunimmt. Im Gegensatz dazu interessieren sich Benutzer mehr für ihre lokale Zeit, die Zeit, die sie auf ihren Kalendern und Uhren ablesen. Der Prozess der Konvertierung zwischen UTC-Zeit und lokaler Zeit beinhaltet ein Zeitzonen-Offset, das wie folgt berechnet wird:
local time = UTC time + offset
Zum Beispiel, wenn die UTC-Zeit 1970-01-01T00:00:00 ist, und der Offset "-05:00", dann ist die lokale Zeit:
1970-01-01T00:00:00 + -05:00 = 1969-12-31T19:00:00
Indem man diese lokale Zeit mit dem Offset versieht, indem man diese Zeit als "1969-12-31T19:00:00-05:00" ausdrückt, kann sie nun eindeutig als ein Moment in der Geschichte verstanden werden.
Um den Offset zu kennen, benötigen wir zwei Informationen, die Zeitzone und den Moment. Die Zeitzone ist eine Region auf der Erde, in der zu jeder Zeit derselbe Offset verwendet wird. Zwei Uhren in derselben Zeitzone zeigen immer gleichzeitig dieselbe Zeit an, aber der Offset muss nicht konstant sein: Das heißt, die Zeit dieser Uhren kann sich abrupt ändern. Dies passiert häufig während Sommerzeit-Umstellungen, wenn sich der Offset um eine Stunde ändert, was zweimal im Jahr geschieht. Offsets können sich auch aufgrund politischer Änderungen dauerhaft ändern, z. B. wenn ein Land die Zeitzonen wechselt.
Die Zeitzonen sind in der IANA Time Zone Database gespeichert. Jede IANA-Zeitzone hat:
- Einen primären Zeitzonenbezeichner, der die Zeitzone eindeutig identifiziert. Er bezieht sich normalerweise auf ein geografisches Gebiet, das durch eine Stadt verankert ist (z. B.
Europe/ParisoderAfrica/Kampala), kann aber auch Zeitzonen mit einfachem Offset wieUTC(ein konsistenter+00:00Offset) oderEtc/GMT+5(was aus historischen Gründen ein negativer Offset-05:00ist) bezeichnen. Aus historischen Gründen ist der primäre Name für die UTC-ZeitzoneUTC, obwohl sie in IANAEtc/UTCist. - Eine Zeitzonendefinition in Form einer Tabelle, die UTC-Datum/Zeit-Bereiche (einschließlich zukünftiger Bereiche) spezifischen Offsets zuordnet.
- Null oder mehr nicht-primäre Zeitzonenbezeichner, die Aliase für den primären Zeitzonenbezeichner sind. Dies sind normalerweise historische Namen, die nicht mehr verwendet werden, aber aus Kompatibilitätsgründen beibehalten werden. Siehe unten für weitere Informationen.
Als Eingabe werden benannte Bezeichner case-insensitiv abgeglichen. Intern werden sie in ihrer bevorzugten Schreibung gespeichert, und nicht-primäre Bezeichner werden nicht in ihren primären Bezeichner umgewandelt.
Hinweis:
Wenn Sie den Zeitzonennamen festlegen, wollen Sie ihn selten auf "UTC" setzen. ZonedDateTime ist dafür gedacht, Benutzern angezeigt zu werden, aber kein Mensch lebt in der "UTC"-Zeitzone. Wenn Sie die Zeitzone zum Zeitpunkt der Erstellung nicht kennen, aber die kalenderbasierte Zeit wissen, verwenden Sie ein Temporal.PlainDateTime. Wenn Sie den genauen Moment kennen, verwenden Sie ein Temporal.Instant.
Wenn eine Temporal API einen Zeitzonenbezeichner akzeptiert, akzeptiert sie zusätzlich zu primären Zeitzonenbezeichnern und nicht-primären Zeitzonenbezeichnern auch einen Offset-Zeitzonenbezeichner, der dieselbe Form wie der Offset hat, außer dass keine Unterminuten-Präzision erlaubt ist. Zum Beispiel sind +05:30, -08, +0600 alle gültige Offset-Bezeichner. Intern werden Offset-Bezeichner in der ±HH:mm Form gespeichert.
Hinweis: Vermeiden Sie die Verwendung von Offset-Bezeichnern, wenn Sie stattdessen einen benannten Zeitzonenbezeichner verwenden können. Selbst wenn eine Region immer einen einzigen Offset verwendet hat, ist es besser, den benannten Bezeichner zu verwenden, um sich vor zukünftigen politischen Änderungen des Offsets zu schützen.
Wenn eine Region mehrere Offsets verwendet (oder verwendet hat), ist es umso wichtiger, ihre benannte Zeitzone zu verwenden. 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 einer Sommerzeit-Umstellung), dann wären Ihre Berechnungen mit einer falschen lokalen Zeit versehen. Die Verwendung einer benannten Zeitzone stellt sicher, dass lokale Daten und Zeiten immer für den richtigen Offset für diesen Moment angepasst werden.
Zur Bequemlichkeit, wenn Sie einen Zeitzonenbezeichner an Temporal APIs wie Temporal.ZonedDateTime.prototype.withTimeZone() und die timeZoneId Option von Temporal.ZonedDateTime.from() weitergeben, können Sie ihn in einigen anderen Formen angeben:
- Als eine andere
ZonedDateTimeInstanz, derentimeZoneIdverwendet wird. - Als eine RFC 9557 Zeichenkette mit einer Zeitzonenannotation, deren Zeitzonenbezeichner verwendet wird.
- Als eine ISO 8601 / RFC 3339 Zeichenkette mit einem Offset, deren Offset als Offset-Bezeichner verwendet wird; oder, wenn Sie
Zverwenden, dann wird die"UTC"Zeitzone verwendet. Diese Verwendung wird im Allgemeinen nicht empfohlen, da, wie oben erläutert, Offset-Bezeichner nicht die Fähigkeit haben, sicher andereTemporal.ZonedDateTimeInstanzen über einen Offset-Übergang wie den Beginn oder das Ende der Sommerzeit abzuleiten. Stattdessen sollten Sie einfachTemporal.Instantverwenden oder die tatsächliche benannte Zeitzone des Benutzers abrufen.
Die IANA-Zeitzonendatenbank ändert sich von Zeit zu Zeit, meist um neue Zeitzonen als Reaktion auf politische Änderungen hinzuzufügen. Allerdings werden in seltenen Fällen IANA-Zeitzonenbezeichner umbenannt, um aktualisierte englische Übersetzungen eines Stadtnamens zu verwenden oder um veraltete Namenskonventionen zu aktualisieren. Zum Beispiel hier ein paar bemerkenswerte Namensänderungen:
| Aktueller IANA-primärer Bezeichner | Alter, jetzt nicht-primärer Bezeichner |
|---|---|
America/Argentina/Buenos_Aires |
America/Buenos_Aires |
Asia/Kolkata |
Asia/Calcutta |
Asia/Ho_Chi_Minh |
Asia/Saigon |
Europe/Kyiv |
Europe/Kiev |
Historisch gesehen haben diese Umbenennungen Probleme für Programmierer verursacht, weil die Unicode CLDR-Datenbank (eine Bibliothek, die von Browsern verwendet wird, um Zeitzonenbezeichner und -daten bereitzustellen) aus Stabilitätsgründen nicht den Umbennungen von IANA gefolgt ist (https://unicode.org/reports/tr35/#Time_Zone_Identifiers). Infolgedessen haben einige Browser wie Chrome und Safari veraltete Bezeichner von CLDR gemeldet, während andere Browser wie Firefox die Standardwerte von CLDR überschrieben und die aktualisierten primären Bezeichner gemeldet haben.
Mit der Einführung von Temporal ist dieses Verhalten jetzt mehr 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 die aktuellen Bezeichner bereitzustellen. - Zeitzonenbezeichner, die vom Programmierer bereitgestellt werden, werden nie durch einen Alias ersetzt. Zum Beispiel, wenn der Anrufer
Asia/CalcuttaoderAsia/Kolkataals den Bezeichner-Eingang fürTemporal.ZonedDateTime.from()bereitstellt, wird derselbe Bezeichner in der resultierenden Instanz destimeZoneIdzurückgegeben. Beachten Sie, dass die Buchstaben im Output normalisiert werden, um IANA zu entsprechen, sodassASIA/calCuTTaals Eingabe einetimeZoneIdvonAsia/Calcuttaals Ausgabe erzeugt. - Wenn ein Zeitzonenbezeichner nicht von einem Anrufer bereitgestellt wird, sondern von dem System selbst bezogen wird (zum Beispiel, wenn
Temporal.Now.timeZoneId()verwendet wird), werden in allen Browsern moderne Bezeichner zurückgegeben. Bei Stadtnamenänderungen gibt es eine zweijährige Lücke, bevor diese systemeigenen Bezeichner-APIs den neuen Namen ausgeben, was anderen Komponenten (wie einem Node-Server) Zeit gibt, ihre Kopien der IANA-Datenbank zu aktualisieren, um den neuen Namen zu erkennen.
Beachten Sie, dass die Zuteilung 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 da sie verschiedenen Ländern entsprechen (Island und Côte d'Ivoire, jeweils), werden sie als unterschiedliche primäre Bezeichner behandelt.
Diese Standardisierung gilt auch außerhalb von Temporal. Zum Beispiel wird die timeZone Option, die von Intl.DateTimeFormat.prototype.resolvedOptions() zurückgegeben wird, auch nie durch einen Alias ersetzt, obwohl Browser diese Bezeichner vor der Standardisierung durch Temporal traditionell kanonisiert haben. Andererseits geben Intl.Locale.prototype.getTimeZones() und Intl.supportedValuesOf() (timeZone Option) die aktuellsten Bezeichner zurück, während einige Browser früher den alten, nicht-primären Bezeichner zurückgegeben haben.
RFC 9557 Format
ZonedDateTime Objekte können im RFC 9557 Format, einer Erweiterung des ISO 8601 / RFC 3339 Formats, serialisiert und geparst werden. Die Zeichenkette hat folgende Form (Leerzeichen sind nur zur besseren Lesbarkeit und sollten in der tatsächlichen Zeichenkette 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
01bis12. DD-
Eine zweistellige Zahl von
01bis31. DieYYYY,MM, undDDKomponenten können durch-oder nichts getrennt werden. TOptional-
Der Datum-Uhrzeit-Trenner, der
T,toder ein Leerzeichen sein kann. Nur vorhanden, wennHHvorhanden ist. HHOptional-
Eine zweistellige Zahl von
00bis23. Standard ist00. mmOptional-
Eine zweistellige Zahl von
00bis59. Standard ist00. ss.sssssssssOptional-
Eine zweistellige Zahl von
00bis59. Kann optional von einem.oder,und einer bis neun Ziffern folgen. Standardwert ist00. DieHH,mm, undssKomponenten können durch:oder nichts getrennt werden. Man kann entweder nurssoder sowohlssals auchmmweglassen, sodass die Uhrzeit eine von drei Formen haben kann:HH,HH:mmoderHH:mm:ss.sssssssss. Z/±HH:mmOptional-
Entweder der UTC-Bezeichner
Zoderz, oder ein UTC-Offset in der Form+oder-gefolgt von demselben Format wie die Zeitkomponente. Beachten Sie, dass die Unterminuten-Präzision (:ss.sssssssss) von anderen Systemen möglicherweise nicht unterstützt wird und akzeptiert, aber nie ausgegeben wird. Wenn weggelassen, wird der Offset vom Zeitzonenbezeichner abgeleitet. Wenn vorhanden, muss die Zeit ebenfalls angegeben werden.Zist nicht dasselbe wie+00:00: Ersteres bedeutet, dass die Zeit in UTC-Form angegeben ist, unabhängig vom Zeitzonenbezeichner, während letzteres bedeutet, dass die Zeit in Ortszeit angegeben ist, die zufällig UTC+0 ist und gegen den Zeitzonenbezeichner über dieoffsetOption validiert wird. [time_zone_id]-
Ersetzen Sie
time_zone_iddurch den Zeitzonenbezeichner (benannt oder als Offset) wie oben beschrieben. Kann ein kritisches Flag haben, indem der Bezeichner mit!vorangestellt wird: z. B.[!America/New_York]. Dieses Flag teilt anderen Systemen im Allgemeinen mit, dass es nicht ignoriert werden darf, wenn sie es nicht unterstützen. Beachten Sie, dass es fürTemporal.ZonedDateTime.from()erforderlich ist: Wenn es weggelassen wird, wird einRangeErrorverursacht. Wenn Sie ISO 8601 / RFC 3339 Zeichenketten ohne Zeitzonenbezeichner-Annotationen parsen möchten, verwenden SieTemporal.Instant.from()stattdessen. [u-ca=calendar_id]Optional-
Ersetzen Sie
calendar_iddurch den zu verwendenden Kalender. SieheIntl.supportedValuesOf()für eine Liste der häufig unterstützten Kalendertypen. Standard ist[u-ca=iso8601]. Kann ein kritisches Flag haben, indem der Schlüssel mit!vorangestellt wird: z. B.[!u-ca=iso8601]. Dieses Flag teilt anderen Systemen im Allgemeinen mit, dass es nicht ignoriert werden darf, wenn sie es nicht unterstützen. DerTemporalParser wird einen Fehler werfen, wenn die Annotationen zwei oder mehr Kalenderanmerkungen enthalten und eine davon kritisch ist. Beachten Sie, dass dasYYYY-MM-DDimmer als ISO 8601 Kalenderdatum interpretiert und dann in den angegebenen Kalender umgewandelt wird.
Als Eingabe werden andere Anmerkungen im [key=value] Format ignoriert und dürfen nicht das kritische Flag haben.
Beim Serialisieren können Sie die Anzahl der Bruchteilen von Sekunden konfigurieren, ob der Offset/Zeitzonen-ID/Kalender-ID angezeigt wird und ob ein kritisches Flag für die Annotationen hinzugefügt wird.
Mehrdeutigkeit und Lücken von lokaler Zeit zu UTC-Zeit
Angesichts einer Zeitzone ist die Umwandlung von UTC in Ortszeit einfach: Man erhält zuerst den Offset mithilfe des Zeitzonennamens und des Moments und addiert dann den Offset zum Moment. Umgekehrt gilt dies nicht: Die Umrechnung von Ortszeit in UTC ist ohne einen expliziten Offset mehrdeutig, da eine Ortszeit null, einer oder mehreren UTC-Zeiten entsprechen kann. Betrachten Sie die häufigste Ursache: Sommerzeitumstellungen. Nehmen Sie New York als Beispiel. Sein Standardoffset ist UTC-5, aber während der DST werden alle Uhren um eine Stunde vorgedreht, sodass der Offset UTC-4 wird. In den USA finden Umstellungen um 2:00 Uhr Ortszeit statt, betrachten Sie daher diese beiden Umstellungstage:
| UTC-Zeit | New York-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, verschwand im März eine Stunde aus der Ortszeit, und im November gibt es zwei Stunden, die dieselbe Uhrzeit haben. Angenommen, wir hatten ein PlainDateTime, das "2024-03-10T02:05:00" sagt, und wir wollen es in der America/New_York Zeitzone interpretieren, wird es keine Zeit geben, die ihm entspricht, während ein PlainDateTime, das "2024-11-03T01:05:00" sagt, zwei verschiedenen Momenten entsprechen kann.
Wenn ein ZonedDateTime aus einer lokalen Zeit konstruiert wird (unter Verwendung von Temporal.ZonedDateTime.from(), Temporal.ZonedDateTime.prototype.with(), Temporal.PlainDateTime.prototype.toZonedDateTime()), kann das Verhalten bei Mehrdeutigkeit und Lücken über die disambiguation Option konfiguriert werden:
earlier-
Wenn es zwei mögliche Momente gibt, wählen Sie den früheren. Wenn es eine Lücke gibt, weichen Sie um die Lückendauer zurück.
later-
Wenn es zwei mögliche Momente gibt, wählen Sie den späteren. Wenn es eine Lücke gibt, weichen Sie um die Lückendauer vor.
compatible(Standard)-
Gleiches Verhalten wie bei
Date: Verwenden Sielaterfür Lücken undearlierfür Mehrdeutigkeiten. reject-
Werfen Sie einen
RangeError, wann immer eine Mehrdeutigkeit oder eine Lücke besteht.
Es gibt mehrere Fälle, in denen es bei der Konstruktion eines ZonedDateTime keine Mehrdeutigkeit gibt:
- Wenn die Zeit in UTC über den
ZOffset angegeben ist. - Wenn der Offset explizit angegeben und verwendet wird (siehe unten).
Offset-Mehrdeutigkeit
Wir haben bereits gezeigt, wie Mehrdeutigkeit entstehen kann, wenn eine Ortszeit in einer Zeitzone interpretiert wird, ohne dass ein expliziter Offset angegeben ist. Wenn jedoch ein expliziter Offset angegeben wird, entsteht ein weiterer Konflikt: zwischen dem wie angegebenen Offset und dem Offset, der aus der Zeitzone und der Ortszeit berechnet wird. Dies ist ein unvermeidbares Realitätsproblem: Wenn Sie eine Zeit in der Zukunft mit einem erwarteten Offset speichern, dann kann sich die Zeitzonendefinition vor diesem Zeitpunkt aufgrund politischer Erwägungen ändern. Nehmen wir an, wir stellen 2018 eine Erinnerung zur Zeit 2019-12-23T12:00:00-02:00[America/Sao_Paulo] ein (was eine Sommerzeit ist; Brasilien ist auf der südlichen Halbkugel, daher tritt es im Oktober in die DST ein und im Februar aus), aber bevor diese Zeit eintritt, beschließt Brasilien Anfang 2019, die Sommerzeit nicht mehr zu beachten (DST aufzugeben), so dass der reale Offset -03:00 wird. Sollte die Erinnerung jetzt noch mittags ausgelöst werden (die local time beibehalten), oder sollte sie um 11:00 Uhr ausgelöst werden (die exact time beibehalten)?
Bei der Konstruktion eines ZonedDateTime mit Temporal.ZonedDateTime.from() oder wenn es mit der with() Methode aktualisiert wird, kann das Verhalten für Offset-Mehrdeutigkeit über die offset Option konfiguriert werden:
use-
Verwenden Sie den Offset, um die genaue Zeit zu berechnen. Diese Option "verwendet" den Offset bei der Bestimmung des Moments, der durch die Zeichenkette repräsentiert wird, was der gleiche Moment sein wird, der ursprünglich berechnet wurde, wenn wir die Zeit gespeichert haben, selbst wenn sich der Offset zu diesem Moment geändert hat. Der Zeitzonenbezeichner wird trotzdem verwendet, um dann den (möglicherweise aktualisierten) Offset zu ermitteln und diesen Offset zu verwenden, um die genaue Zeit in Ortszeit umzuwandeln.
ignore-
Verwenden Sie den Zeitzonenbezeichner, um den Offset neu zu berechnen, ignorierend den Offset, der in der Zeichenkette angegeben ist. Diese Option behält dieselbe lokale Zeit bei, die ursprünglich berechnet wurde, als wir die Zeit gespeichert haben, kann jedoch einem unterschiedlichen Moment entsprechen. Beachten Sie, dass diese Option dieselbe lokale Zeitinterpretationsmehrdeutigkeit wie oben demonstriert verursachen kann, die mit der
disambiguationOption aufgelöst wird. reject-
Werfen Sie einen
RangeError, wann immer ein Konflikt zwischen dem Offset und dem Zeitzonenbezeichner besteht. Dies ist die Standardoption fürTemporal.ZonedDateTime.from(). prefer-
Verwenden Sie den Offset, wenn er gültig ist, andernfalls wird der Offset aus dem Zeitzonenbezeichner berechnet. Dies ist die Standardoption für
Temporal.ZonedDateTime.prototype.with()(siehe die Methode für weitere Details). Dies ist anders alsignore, da im Fall von lokaler Zeitmehrdeutigkeit der Offset verwendet wird, um ihn zu lösen, anstatt diedisambiguationOption.
Beachten Sie, dass der Z Offset nicht gleich +00:00 ist. Der Z Offset bedeutet "die Zeit in UTC ist bekannt, aber der Offset zur lokalen Zeit ist unbekannt", gemäß RFC 9557. Wenn die Zeitzeichenkette den Z Offset verwendet, wird die offset Option ignoriert, und der Offset wird aus der Zeitzonen-ID abgeleitet. Andererseits ist der +00:00 Offset als Einheimzeit-Offset interpretiert, der zufällig mit UTC übereinstimmt und gegen die Zeitzonen-ID validiert wird.
Hinweis:
Obwohl Temporal.Instant.from() auch eine RFC 9557 Zeichenkette in derselben Form verarbeitet, gibt es keine Mehrdeutigkeit, da es immer den Zeitzonenbezeichner ignoriert und nur den Offset liest.
Konstruktor
Temporal.ZonedDateTime()Experimentell-
Erstellt ein neues
Temporal.ZonedDateTimeObjekt, indem die zu Grunde liegenden Daten direkt bereitgestellt werden.
Statische Methoden
Temporal.ZonedDateTime.compare()-
Gibt eine Nummer (-1, 0 oder 1) zurück, die angibt, ob die erste Datum-Uhrzeit vor, gleich der oder nach der zweiten Datum-Uhrzeit kommt. Entspricht dem Vergleich der
epochNanosecondsder beiden Datum-Uhrzeiten. Temporal.ZonedDateTime.from()-
Erstellt ein neues
Temporal.ZonedDateTimeObjekt aus einem anderenTemporal.ZonedDateTimeObjekt, einem Objekt mit Datum-, Zeit- und Zeitzoneneigenschaften oder einer RFC 9557 Zeichenkette.
Instanz-Eigenschaften
Diese Eigenschaften sind in Temporal.ZonedDateTime.prototype definiert und werden von allen Temporal.ZonedDateTime Instanzen geteilt.
Temporal.ZonedDateTime.prototype.calendarId-
Gibt eine Zeichenkette zurück, die den Kalender repräsentiert, der zur Interpretation des internen ISO 8601 Datums verwendet wird.
Temporal.ZonedDateTime.prototype.constructor-
Die Konstrukturfunktion, die das Objekt instanziiert hat. Für
Temporal.ZonedDateTimeInstanzen ist der Anfangswert derTemporal.ZonedDateTime()Konstruktor. Temporal.ZonedDateTime.prototype.day-
Gibt eine positive Ganzzahl zurück, die den 1-basierten Tagesindex im Monat dieses Datums darstellt, was die gleiche Tageszahl ist, die man auf einem Kalender sehen würde. Kalender-abhängig. Beginnt im Allgemeinen bei 1 und ist kontinuierlich, aber nicht immer.
Temporal.ZonedDateTime.prototype.dayOfWeek-
Gibt eine positive Ganzzahl zurück, die den 1-basierten Tagesindex in der Woche dieses Datums darstellt. Tage in einer Woche sind sequentiell von
1bisdaysInWeeknummeriert, wobei jede Zahl ihrem Namen zugeordnet ist. Kalender-abhängig. 1 repräsentiert normalerweise Montag im Kalender, selbst wenn lokale Gegebenheiten den Kalender möglicherweise einen anderen Tag als ersten Tag der Woche betrachten (sieheIntl.Locale.prototype.getWeekInfo()). Temporal.ZonedDateTime.prototype.dayOfYear-
Gibt eine positive Ganzzahl zurück, die den 1-basierten Tagesindex im Jahr dieses Datums darstellt. Der erste Tag dieses Jahres ist
1, und der letzte Tag ist derdaysInYear. Kalender-abhängig. Temporal.ZonedDateTime.prototype.daysInMonth-
Gibt eine positive Ganzzahl zurück, die die Anzahl der Tage im Monat dieses Datums darstellt. Kalender-abhängig.
Temporal.ZonedDateTime.prototype.daysInWeek-
Gibt eine positive Ganzzahl zurück, die die Anzahl der Tage in der Woche dieses Datums darstellt. Kalender-abhängig. Für den ISO 8601 Kalender ist dies immer 7, aber in anderen Kalendersystemen kann es von Woche zu Woche variieren.
Temporal.ZonedDateTime.prototype.daysInYear-
Gibt eine positive Ganzzahl zurück, die die Anzahl der Tage im Jahr dieses Datums darstellt. Kalender-abhängig. Für den ISO 8601 Kalender ist dies 365 oder 366 in einem Schaltjahr.
Temporal.ZonedDateTime.prototype.epochMilliseconds-
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 zu diesem Moment verstrichen sind. Entspricht der Teilung von
epochNanosecondsdurch1e6und der Abrundung des Ergebnisses. Temporal.ZonedDateTime.prototype.epochNanoseconds-
Gibt einen
BigIntzurück, der die Anzahl der Nanosekunden darstellt, die seit dem Unix-Epoch (Mitternacht zu Beginn des 1. Januar 1970, UTC) bis zu diesem Moment verstrichen sind. Temporal.ZonedDateTime.prototype.era-
Gibt eine kalenderabhängige Kleinbuchstabenkette zurück, die die Ära dieses Datums darstellt, oder
undefined, wenn der Kalender keine Ären verwendet (z.B. ISO 8601).eraunderaYearzusammen identifizieren ein Jahr in einem Kalender eindeutig, auf dieselbe Weise wieyear. Kalender-abhängig. Für Gregorianisch ist es entweder"gregory"oder"gregory-inverse". Temporal.ZonedDateTime.prototype.eraYear-
Gibt eine nicht negative Ganzzahl zurück, die das Jahr dieses Datums innerhalb der Ära darstellt, oder
undefined, wenn der Kalender keine Ären verwendet (z.B. ISO 8601). Der Jahr-Index beginnt normalerweise bei 1 (häufiger) oder 0, und Jahre in einer Ära können mit der Zeit abnehmen (z.B. Gregorianisch v. Chr.).eraunderaYearzusammen identifizieren ein Jahr in einem Kalender eindeutig, auf dieselbe Weise wieyear. Kalender-abhängig. Temporal.ZonedDateTime.prototype.hour-
Gibt eine Ganzzahl von 0 bis 23 zurück, die die Stundenkomponente dieser Zeit darstellt.
Temporal.ZonedDateTime.prototype.hoursInDay-
Gibt eine positive Ganzzahl zurück, die die Anzahl der Stunden am Tag dieses Datums in der Zeitzone darstellt. Sie kann im Falle von Offset-Änderungen wie der Sommerzeit mehr oder weniger als 24 sein.
Temporal.ZonedDateTime.prototype.inLeapYear-
Gibt einen booleschen Wert zurück, der angibt, ob dieses Datum in einem Schaltjahr liegt. Ein Schaltjahr ist ein Jahr, das mehr Tage hat (aufgrund eines Schalttages oder eines Schaltmonats) als ein gewöhnliches Jahr. Kalender-abhängig.
Temporal.ZonedDateTime.prototype.microsecond-
Gibt eine Ganzzahl von 0 bis 999 zurück, die die Mikrosekundenkomponente (10-6 Sekunden) dieser Zeit darstellt.
Temporal.ZonedDateTime.prototype.millisecond-
Gibt eine Ganzzahl von 0 bis 999 zurück, die die Millisekundenkomponente (10-3 Sekunden) dieser Zeit darstellt.
Temporal.ZonedDateTime.prototype.minute-
Gibt eine Ganzzahl von 0 bis 59 zurück, die die Minutenkomponente dieser Zeit darstellt.
Temporal.ZonedDateTime.prototype.month-
Gibt eine positive Ganzzahl zurück, die den 1-basierten Monatsindex im Jahr dieses Datums darstellt. Der erste Monat dieses Jahres ist
1, und der letzte Monat ist dermonthsInYear. Kalender-abhängig. Beachten Sie, dass im Gegensatz zuDate.prototype.getMonth(), der Index 1-basiert ist. Wenn der Kalender Schaltmonate hat, dann kann der Monat mit dem gleichenmonthCodeunterschiedlichemonthIndizes für verschiedene Jahre haben. Temporal.ZonedDateTime.prototype.monthCode-
Gibt eine kalenderabhängige Zeichenkette zurück, die den Monat dieses Datums darstellt. Kalender-abhängig. Normalerweise ist es
Mplus eine zweistellige Monatszahl. Für Schaltmonate ist es der Code des Vormonats, gefolgt vonL. Wenn der Schaltmonat der erste Monat des Jahres ist, ist der CodeM00L. Temporal.ZonedDateTime.prototype.monthsInYear-
Gibt eine positive Ganzzahl zurück, die die Anzahl der Monate im Jahr dieses Datums darstellt. Kalender-abhängig. Für den ISO 8601 Kalender ist dies immer 12, aber in anderen Kalendersystemen kann es variieren.
Temporal.ZonedDateTime.prototype.nanosecond-
Gibt eine Ganzzahl von 0 bis 999 zurück, die die Nanosekundenkomponente (10-9 Sekunden) dieser Zeit darstellt.
Temporal.ZonedDateTime.prototype.offset-
Gibt eine Zeichenkette zurück, die den Offset darstellt, der zur Interpretation des internen Moments verwendet wird, in der Form
±HH:mm(oder±HH:mm:ss.sssssssssmit so viel Unterminuten-Präzision wie nötig). Temporal.ZonedDateTime.prototype.offsetNanoseconds-
Gibt eine Ganzzahl zurück, die den Offset darstellt, der zur Interpretation des internen Moments verwendet wird, als Anzahl der Nanosekunden (positiv oder negativ).
Temporal.ZonedDateTime.prototype.second-
Gibt eine Ganzzahl von 0 bis 59 zurück, die die Sekundenkomponente dieser Zeit darstellt.
Temporal.ZonedDateTime.prototype.timeZoneId-
Gibt eine Zeichenkette zurück, die den Zeitzonenbezeichner darstellt, der zur Interpretation des internen Moments verwendet wird. Es verwendet dieselbe Zeichenkette, die beim Konstruieren des
Temporal.ZonedDateTimeObjekts verwendet wurde, die entweder ein IANA-Zeitzonenname oder ein fester Offset ist. Temporal.ZonedDateTime.prototype.weekOfYear-
Gibt eine positive Ganzzahl zurück, die den 1-basierten Wochenindex im
yearOfWeekdieses Datums darstellt, oderundefined, wenn der Kalender kein gut definiertes Wochensystem hat. Die erste Woche des Jahres ist1. Kalender-abhängig. Beachten Sie, dass beim ISO 8601 die ersten und letzten Tage des Jahres der letzten Woche des vorherigen Jahres oder der ersten Woche des nächsten Jahres zugeschrieben werden, wodurch dasyearOfWeekum 1 abweichen kann. Temporal.ZonedDateTime.prototype.year-
Gibt eine Ganzzahl zurück, die die Anzahl der Jahre dieses Datums relativ zum Beginn eines kalender-spezifischen Epochenjahres darstellt. Kalender-abhängig. Normalerweise ist Jahr 1 entweder das erste Jahr der neuesten Ära oder das ISO 8601 Jahr
0001. Wenn die Epoche in der Mitte des Jahres liegt, wird das Jahr vor und nach dem Startdatum der Ära denselben Wert aufweisen. Temporal.ZonedDateTime.prototype.yearOfWeek-
Gibt eine Ganzzahl zurück, die das Jahr angibt, das mit der
weekOfYeardieses Datums zusammenpassen 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 der letzten Woche des vorherigen Jahres oder der ersten Woche des nächsten Jahres zugeschrieben werden, wodurch sich dasyearOfWeekum 1 unterscheidet. Temporal.ZonedDateTime.prototype[Symbol.toStringTag]-
Der Anfangswert der
[Symbol.toStringTag]Eigenschaft ist die Zeichenkette"Temporal.ZonedDateTime". Diese Eigenschaft wird inObject.prototype.toString()verwendet.
Instanz-Methoden
Temporal.ZonedDateTime.prototype.add()-
Gibt ein neues
Temporal.ZonedDateTimeObjekt zurück, das diese Datum-Uhrzeit um eine angegebene Dauer (in einer durchTemporal.Duration.from()umwandelbaren Form) nach vorne verschoben darstellt. Temporal.ZonedDateTime.prototype.equals()-
Gibt
truezurück, wenn diese Datum-Uhrzeit im Wert einer anderen Datum-Uhrzeit (in einer durchTemporal.ZonedDateTime.from()umwandelbaren Form) entspricht, undfalseandernfalls. Sie werden sowohl durch ihre Momentwerte, Zeitzonen als auch ihre Kalender verglichen, sodass zwei Datum-Uhrzeiten aus verschiedenen Kalendern oder Zeitzonen als gleich durchTemporal.ZonedDateTime.compare()betrachtet werden können, aber nicht durchequals(). Temporal.ZonedDateTime.prototype.getTimeZoneTransition()-
Gibt ein
Temporal.ZonedDateTimeObjekt zurück, das den ersten Moment nach oder vor diesem Moment darstellt, an dem sich das UTC-Offset der Zeitzone ändert, odernull, wenn es keinen solchen Übergang gibt. Dies ist nützlich, um die Offset-Regeln einer Zeitzone zu ermitteln, wie ihr Sommerzeitmuster. Temporal.ZonedDateTime.prototype.round()-
Gibt ein neues
Temporal.ZonedDateTimeObjekt zurück, das diese Datum-Uhrzeit auf die angegebene Einheit gerundet darstellt. Temporal.ZonedDateTime.prototype.since()-
Gibt ein neues
Temporal.DurationObjekt zurück, das die Dauer von einer anderen Datum-Uhrzeit (in einer durchTemporal.ZonedDateTime.from()umwandelbaren Form) bis zu dieser Datum-Uhrzeit darstellt. Die Dauer ist positiv, wenn die andere Datum-Uhrzeit vor dieser Datum-Uhrzeit liegt, und negativ, wenn sie danach liegt. Temporal.ZonedDateTime.prototype.startOfDay()-
Gibt ein
Temporal.ZonedDateTimeObjekt zurück, das den ersten Moment dieses Tages in der Zeitzone darstellt. Es hat normalerweise eine Uhrzeit von00:00:00, kann jedoch anders sein, wenn Mitternacht aufgrund von Offset-Änderungen nicht existiert, in welchem Fall die erste existierende Uhrzeit zurückgegeben wird. Temporal.ZonedDateTime.prototype.subtract()-
Gibt ein neues
Temporal.ZonedDateTimeObjekt zurück, dass diese Datum-Uhrzeit um eine angegebene Dauer (in einer durchTemporal.Duration.from()umwandelbaren Form) rückwärts verschoben darstellt. Temporal.ZonedDateTime.prototype.toInstant()-
Gibt ein neues
Temporal.InstantObjekt zurück, das den Moment dieser Datum-Uhrzeit darstellt. Temporal.ZonedDateTime.prototype.toJSON()-
Gibt eine Zeichenkette zurück, die diese Datum-Uhrzeit im gleichen RFC 9557 Format wie
toString()darstellt. Soll implizit durchJSON.stringify()aufgerufen werden. Temporal.ZonedDateTime.prototype.toLocaleString()-
Gibt eine Zeichenkette mit einer sprachabhängigen Darstellung dieser Datum-Uhrzeit zurück.
Temporal.ZonedDateTime.prototype.toPlainDate()-
Gibt ein neues
Temporal.PlainDateObjekt zurück, das den Datumsanteil dieser Datum-Uhrzeit darstellt. Temporal.ZonedDateTime.prototype.toPlainDateTime()-
Gibt ein neues
Temporal.PlainDateTimeObjekt zurück, das das Datum und die Zeit dieser Datum-Uhrzeit darstellt. Nur die Zeitzoneninformationen werden entfernt. Temporal.ZonedDateTime.prototype.toPlainTime()-
Gibt ein neues
Temporal.PlainTimeObjekt zurück, das den Zeitanteil dieser Datum-Uhrzeit darstellt. Temporal.ZonedDateTime.prototype.toString()-
Gibt eine Zeichenkette zurück, die diese Datum-Uhrzeit im RFC 9557 Format darstellt.
Temporal.ZonedDateTime.prototype.until()-
Gibt ein neues
Temporal.DurationObjekt zurück, das die Dauer von dieser Datum-Uhrzeit bis zu einer anderen Datum-Uhrzeit (in einer durchTemporal.ZonedDateTime.from()umwandelbaren Form) darstellt. Die Dauer ist positiv, wenn die andere Datum-Uhrzeit nach dieser Datum-Uhrzeit liegt, und negativ, wenn sie davor liegt. Temporal.ZonedDateTime.prototype.valueOf()-
Wirft einen
TypeError, der verhindert, dassTemporal.ZonedDateTimeInstanzen implizit in Primitiven umgewandelt werden, wenn sie in arithmetischen oder Vergleichsoperationen verwendet werden. Temporal.ZonedDateTime.prototype.with()-
Gibt ein neues
Temporal.ZonedDateTimeObjekt zurück, das diese Datum-Uhrzeit mit einigen Feldern ersetzt durch neue Werte darstellt. Temporal.ZonedDateTime.prototype.withCalendar()-
Gibt ein neues
Temporal.ZonedDateTimeObjekt zurück, das diese Datum-Uhrzeit in dem neuen Kalendersystem interpretiert darstellt. Temporal.ZonedDateTime.prototype.withPlainTime()-
Gibt ein neues
Temporal.ZonedDateTimeObjekt zurück, das diese Datum-Uhrzeit mit dem Zeitanteil vollständig durch die neue Uhrzeit ersetzt darstellt (in einer durchTemporal.PlainTime.from()umwandelbaren Form). Temporal.ZonedDateTime.prototype.withTimeZone()-
Gibt ein neues
Temporal.ZonedDateTimeObjekt zurück, das denselben Moment wie diese Datum-Uhrzeit aber in der neuen Zeitzone darstellt.
Spezifikationen
| Specification |
|---|
| Temporal> # sec-temporal-zoneddatetime-objects> |