Temporal.PlainMonthDay.from()
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.
Die Temporal.PlainMonthDay.from() statische Methode erstellt ein neues Temporal.PlainMonthDay Objekt aus einem anderen Temporal.PlainMonthDay Objekt, einem Objekt mit Monat- und Tag-Eigenschaften oder einem RFC 9557 String.
Syntax
Temporal.PlainMonthDay.from(info)
Temporal.PlainMonthDay.from(info, options)
Parameter
info-
Eines der folgenden:
- Eine
Temporal.PlainMonthDayInstanz, die eine Kopie der Instanz erstellt. - Ein RFC 9557 String, der ein Datum und optional einen Kalender enthält. Wenn der Kalender nicht
iso8601ist, ist ein Jahr erforderlich. - Ein Objekt mit den folgenden Eigenschaften (in der Reihenfolge, in der sie abgerufen und validiert werden):
calendarOptional-
Ein String, der der
calendarIdEigenschaft entspricht. Standardmäßig"iso8601". Alle anderen Eigenschaften werden in diesem Kalendersystem interpretiert (im Gegensatz zumTemporal.PlainMonthDay()Konstruktor, der die Werte im ISO-Kalendersystem interpretiert). SieheIntl.supportedValuesOf()für eine Liste der häufig unterstützten Kalendertypen. day-
Eine Ganzzahl, die der
dayEigenschaft entspricht. Muss positiv sein, unabhängig von deroverflowOption. eraunderaYear-
Ein String und eine Ganzzahl, die anstelle von
yearverwendet werden können. SieheeraunderaYearvonPlainDate. Werden nur verwendet, wenn das Kalendersystem Epochen hat.eraunderaYearmüssen gleichzeitig angegeben werden. Wennmonthangegeben ist, muss mindestens eine voneraYear(zusammen mitera) oderyearangegeben sein. Wenn alle vonera,eraYearundyearangegeben sind, müssen sie konsistent sein. month-
Eine positive Ganzzahl, die anstelle von
monthCodeverwendet werden kann. SiehemonthvonPlainDate. Muss positiv sein, unabhängig von deroverflowOption. Wennmonthangegeben ist und der Kalender nichtiso8601ist, muss auchyear(odereraYearzusammen miteraals Ersatz) angegeben werden, da derselbemonthverschiedenen möglichenmonthCodeWerten in verschiedenen Jahren zugeordnet sein kann. Mindestens eine vonmonthodermonthCodemuss angegeben sein. Wenn sowohlmonthals auchmonthCodeangegeben sind, müssen sie konsistent sein. monthCode-
Entspricht der
monthCodeEigenschaft. Mindestens eine vonmonthodermonthCodemuss angegeben sein. Wenn sowohlmonthals auchmonthCodeangegeben sind, müssen sie konsistent sein. year-
Eine Ganzzahl zur Unterscheidung des
month, falls angegeben, da für einige Kalender derselbemonthin unterschiedlichen Jahren einen unterschiedlichenmonthCodebedeuten kann. SieheyearvonPlainDate. Wenn ein Jahr angegeben ist, validiert dieoverflowOption den Monat-Tag im angegebenen Jahr, nicht nur in irgendeinem Jahr. Wennmonthangegeben ist, muss mindestens eine voneraYear(zusammen mitera) oderyearangegeben sein. Wenn alle vonera,eraYearundyearangegeben sind, müssen sie konsistent sein.
- Eine
optionsOptional-
Ein Objekt, das die folgende Eigenschaft enthält:
overflowOptional-
Ein String, der das Verhalten angibt, wenn eine Datumskomponente außerhalb des Bereichs liegt (bei Verwendung des Objekt-
info). Mögliche Werte sind:"constrain"(Standard)-
Die Datumskomponente wird auf den gültigen Bereich geklammert.
"reject"-
Ein
RangeErrorwird ausgelöst, wenn die Datumskomponente außerhalb des Bereichs liegt.
Rückgabewert
Ein neues Temporal.PlainMonthDay Objekt, das den Monat und Tag darstellt, die durch info im angegebenen calendar spezifiziert werden.
Jedes PlainMonthDay speichert intern ein vollständiges ISO 8601-Datum, das denselben Monat-Tag im Zielkalender hat wie der angegebene. Das Referenzjahr ist sichtbar, wenn es mit toString() in einen String umgewandelt wird, der ein ISO-Datum ausgibt. Das Referenzjahr wird willkürlich, aber konsistent gewählt (d.h. jedes (monthCode, day) Paar wird immer demselben ISO-Referenzjahr zugeordnet). Es verwendet nicht das im Eingabewert angegebene Jahr. Stattdessen wird das Referenzjahr durch Auffinden des neuesten Datums vor dem 31. Dezember 1972 gewählt, das im Zielkalender denselben Monat-Tag hat, oder das früheste Datum nach dem 31. Dezember 1972, wenn kein solches Datum existiert.
Zum Beispiel ist für gregorianisch abgeleitete Kalender das Referenzjahr 1972. Für den hebräischen Kalender ist das Referenzjahr 1972 im gregorianischen Kalender, aber wenn der Monat Adar I (M05L) ist, der ein Schaltmonat ist, ist das Referenzjahr stattdessen 1970 (5730 im hebräischen Kalender), da das nächste Schaltjahr 1973 (5733 im hebräischen Kalender) ist, welches nach 1972 liegt.
Diese Referenzjahrkanonisierung stellt sicher, dass equals() die zugrunde liegenden ISO-Daten direkt vergleichen kann, ohne zusätzliche Berechnung.
Ausnahmen
TypeError-
Wird in einem der folgenden Fälle ausgelöst:
infoist weder ein Objekt noch ein String.optionsist weder ein Objekt nochundefined.- Die angegebenen Eigenschaften sind unzureichend, um ein Datum eindeutig zu bestimmen. Normalerweise müssen ein
year(odereraunderaYear), einmonthund einday, oder einmonthCodeund eindayangegeben werden.
RangeError-
Wird in einem der folgenden Fälle ausgelöst:
- Die angegebenen Eigenschaften, die dieselbe Komponente spezifizieren, sind inkonsistent.
- Die angegebenen nicht-numerischen Eigenschaften sind nicht gültig; zum Beispiel, wenn
monthCodein diesem Kalender niemals ein gültiger Monatscode ist. - Die angegebenen numerischen Eigenschaften liegen außerhalb des Bereichs und
options.overflowist auf"reject"gesetzt. - Die Info liegt nicht im darstellbaren Bereich, der ±(108 + 1) Tage oder etwa ±273.972,6 Jahre ab der Unix-Epoche umfasst.
Beispiele
>Erstellen eines PlainMonthDay aus einem Objekt
// Month code + day
const md = Temporal.PlainMonthDay.from({ monthCode: "M05", day: 2 });
console.log(md.toString()); // 05-02
// Month + day (only for ISO calendar)
const md2 = Temporal.PlainMonthDay.from({ month: 7, day: 1 });
console.log(md2.toString()); // 07-01
// Year + month + day
const md3 = Temporal.PlainMonthDay.from({ year: 2021, month: 7, day: 1 });
console.log(md3.toString()); // 07-01
// Year + month + day in a different calendar (where year is required)
const md4 = Temporal.PlainMonthDay.from({
year: 2021,
month: 7,
day: 1,
calendar: "hebrew",
});
console.log(md4.toString()); // 1972-03-16[u-ca=hebrew]
// Month code + day in a different calendar
const md5 = Temporal.PlainMonthDay.from({
monthCode: "M05L",
day: 1,
calendar: "hebrew",
});
console.log(md5.toString()); // 1970-02-07[u-ca=hebrew]
Steuerung des Überlaufverhaltens
Standardmäßig werden Werte außerhalb des Bereichs auf den gültigen Bereich geklammert. Ein Monat-Tag ohne explizites Referenzjahr ist gültig, solange es mindestens ein Jahr gibt, in dem es gültig ist, auch wenn es nicht jedes Jahr vorkommt. Wenn year, month und day alle gegeben sind, dann könnten die Regeln für das Mapping zu einem gültigen Monat-Tag komplex und spezifisch für jeden Kalender sein, aber hier ist das übliche Verhalten:
- Wenn die
year/monthKombination ungültig ist, wird dermonthgeklammert, um einen gültigenmonthCodeim Jahr zu erhalten. - Wenn die
year/monthCodeKombination ungültig ist, wird ein anderes Jahr gewählt, um denmonthCodebeizubehalten. - Der
daywird im gegebenen Jahr-Monat geklammert, um einen gültigen Monat-Tag zu erhalten.
Dies ist etwas anders als die übliche Datumsklammerung, die das Jahr dem Monatscode vorzieht.
// Month always out of range
const md1 = Temporal.PlainMonthDay.from({ month: 13, day: 1 });
console.log(md1.toString()); // 12-01
// Month out of range for the specific year: 5732 is not a Hebrew leap year,
// so month is clamped to 12 to resolve to a valid monthCode
const md2 = Temporal.PlainMonthDay.from({
year: 5732,
month: 13,
day: 1,
calendar: "hebrew",
});
console.log(md2.toLocaleString("en-US", { calendar: "hebrew" })); // 1 Elul
const underlyingDate = Temporal.PlainDate.from(md2.toString());
console.log(underlyingDate.year, underlyingDate.month); // 5732 12
// Month code exists but not for the specific year: 5731 is not a Hebrew leap year,
// so a different year is chosen to keep the monthCode as M05L
const md3 = Temporal.PlainMonthDay.from({
year: 5731,
monthCode: "M05L",
day: 1,
calendar: "hebrew",
});
console.log(md3.toLocaleString("en-US", { calendar: "hebrew" })); // 1 Adar I
const underlyingDate2 = Temporal.PlainDate.from(md3.toString());
console.log(underlyingDate2.year, underlyingDate2.monthCode); // 5730 M05L
// Day always out of range
const md4 = Temporal.PlainMonthDay.from({ month: 2, day: 30 });
console.log(md4.toString()); // 02-29
// Day out of range for the specific year-month
const md5 = Temporal.PlainMonthDay.from({ year: 2021, month: 2, day: 29 });
console.log(md5.toString()); // 02-28
Sie können dieses Verhalten ändern, sodass stattdessen ein Fehler ausgelöst wird:
Temporal.PlainMonthDay.from(
{ year: 2021, month: 13, day: 1 },
{ overflow: "reject" },
);
// RangeError: date value "month" not in 1..12: 13
Spezifikationen
| Specification |
|---|
| Temporal> # sec-temporal.plainmonthday.from> |
Browser-Kompatibilität
Loading…