Temporal.PlainMonthDay.from()
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Die statische Methode Temporal.PlainMonthDay.from() 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.PlainMonthDay-Instanz, die eine Kopie der Instanz erstellt. - Ein RFC 9557-String, welcher ein Datum und optional einen Kalender enthält. Wenn der Kalender nicht
iso8601ist, ist ein Jahr erforderlich. - Ein Objekt, das die folgenden Eigenschaften enthält (in der Reihenfolge, in der sie abgerufen und validiert werden):
calendarOptional-
Ein String, der der
calendarId-Eigenschaft 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 allgemein unterstützten Kalendertypen. day-
Eine Ganzzahl, die der
day-Eigenschaft entspricht. Muss positiv sein, unabhängig von deroverflow-Option. eraunderaYear-
Ein String und eine Ganzzahl, die anstelle von
yearverwendet werden können. SieheeraunderaYearvonPlainDate. Werden nur verwendet, wenn das Kalendersystem Ären hat.eraunderaYearmüssen gleichzeitig bereitgestellt werden. Wennmonthangegeben ist, muss mindestens eines voneraYear(zusammen mitera) oderyearbereitgestellt werden. Wenn alle vonera,eraYearundyearbereitgestellt werden, müssen sie konsistent sein. month-
Eine positive Ganzzahl, die anstelle von
monthCodeverwendet werden kann. SiehemonthvonPlainDate. Muss positiv sein, unabhängig von deroverflow-Option. Wennmonthbereitgestellt wird und der Kalender nichtiso8601ist, muss auchyear(odereraYearzusammen miteraals Ersatz) bereitgestellt werden, da derselbemonthzu mehreren möglichenmonthCode-Werten in verschiedenen Jahren führen kann. Mindestens eines vonmonthodermonthCodemuss bereitgestellt werden. Wenn sowohlmonthals auchmonthCodebereitgestellt werden, müssen sie konsistent sein. monthCode-
Entspricht der
monthCode-Eigenschaft. Mindestens eines vonmonthodermonthCodemuss bereitgestellt werden. Wenn sowohlmonthals auchmonthCodebereitgestellt werden, müssen sie konsistent sein. year-
Eine Ganzzahl, die zur Unterscheidung von
monthverwendet wird, wenn bereitgestellt, da für einige Kalender derselbemonthje nach Jahr unterschiedlichemonthCodebedeutet. SieheyearvonPlainDate. Wenn ein Jahr bereitgestellt wird, validiert dieoverflow-Option den Monat-Tag im angegebenen Jahr, nicht nur in einem beliebigen Jahr. Wennmonthspezifiziert ist, muss mindestens eines voneraYear(zusammen mitera) oderyearbereitgestellt werden. Wenn alle vonera,eraYearundyearbereitgestellt werden, müssen sie konsistent sein.
- Eine
optionsOptional-
Ein Objekt, das die folgende Eigenschaft enthält:
overflowOptional-
Ein String, der das Verhalten angibt, wenn eine Datums-Komponente außerhalb des Bereichs liegt (bei Verwendung des Objekt-
info). Mögliche Werte sind:"constrain"(Standard)-
Die Datums-Komponente wird auf den gültigen Bereich eingeschränkt.
"reject"-
Ein
RangeErrorwird ausgelöst, wenn die Datums-Komponente außerhalb des Bereichs liegt.
Rückgabewert
Ein neues Temporal.PlainMonthDay-Objekt, das den Monat und Tag repräsentiert, die durch info im angegebenen calendar spezifiziert sind.
Jedes PlainMonthDay speichert intern ein komplettes ISO 8601-Datum, das denselben Monat-Tag im Zielkalender hat wie das, was ausgegeben wird. Das Bezugsjahr wird sichtbar, wenn es mit toString() als ISO-Datum ausgegeben wird. Das Bezugsjahr wird willkürlich, aber konsistent gewählt (d.h. jedes (monthCode, day)-Paar wird immer auf dasselbe ISO-Bezugsjahr abgebildet). Es verwendet nicht das im Eingabewert angegebene Jahr. Stattdessen wird das Bezugsjahr bestimmt, indem das neueste Datum vor dem 31. Dezember 1972, das denselben Monat-Tag im Zielkalender hat, oder das früheste Datum nach dem 31. Dezember 1972 gewählt wird, wenn kein solches Datum existiert.
Zum Beispiel für gregorianische Kalender ist das Bezugsjahr 1972. Für den hebräischen Kalender ist das Bezugsjahr 1972 im gregorianischen Kalender, aber wenn der Monat Adar I (M05L) ist, der ein Schaltmonat ist, ist das Bezugsjahr 1970 (5730 im hebräischen Kalender), da das nächste Schaltjahr 1973 (5733 im hebräischen Kalender) ist, was nach 1972 liegt.
Diese Kanonisierung des Bezugsjahres stellt sicher, dass equals() die zugrunde liegenden ISO-Daten direkt vergleichen kann, ohne zusätzliche Berechnungen.
Ausnahmen
TypeError-
Wird in einem der folgenden Fälle geworfen:
infoist kein Objekt oder String.optionsist kein Objekt oderundefined.- Die bereitgestellten Eigenschaften sind unzureichend, um ein Datum eindeutig zu bestimmen. Gewöhnlich müssen Sie ein
year(odereraunderaYear), einmonthund eindayoder einmonthCodeund eindaybereitstellen.
RangeError-
Wird in einem der folgenden Fälle geworfen:
- Die bereitgestellten Eigenschaften, die dieselbe Komponente spezifizieren, sind inkonsistent.
- Die bereitgestellten nicht-numerischen Eigenschaften sind nicht gültig, zum Beispiel, wenn
monthCodeniemals ein gültiger Monatscode in diesem Kalender ist. - Die bereitgestellten numerischen Eigenschaften sind 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 beträgt.
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, die außerhalb des Bereichs liegen, auf den gültigen Bereich begrenzt. Ein Monat-Tag ohne ausdrückliches Bezugsjahr ist gültig, solange es ein Jahr gibt, in dem es gültig ist, auch wenn es nicht jedes Jahr erscheint. Wenn Jahr, Monat und Tag alle angegeben sind, können die Regeln zur Abbildung auf einen gültigen Monat-Tag komplex und spezifisch für jeden Kalender sein, aber hier ist das übliche Verhalten:
- Wenn die
year/month-Kombination ungültig ist, wirdmontheingeschränkt, um einen gültigenmonthCodeim Jahr zu erhalten. - Wenn die
year/monthCode-Kombination ungültig ist, wird ein anderes Jahr gewählt, um denmonthCodebeizubehalten. daywird im gegebenen Jahr-Monat eingeschränkt, um einen gültigen Monat-Tag zu erhalten.
Dies unterscheidet sich leicht von der üblichen Datumseinschränkung, die das Jahr dem Monatcode 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, um stattdessen einen Fehler zu werfen:
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> |