Signatur
Beschreibung
Die statische Methode Temporal.PlainYearMonth.from() ist der empfohlene Weg, ein Temporal.PlainYearMonth zu erzeugen, also einen Monat in einem bestimmten Jahr ohne Tag, Uhrzeit und Zeitzone. Beispiele sind Abrechnungszeiträume, Ablaufdaten von Kreditkarten oder der Wert eines <input type="month">.
Sie nimmt drei Arten von Eingaben an:
- Ein
Temporal.PlainYearMonth: Es wird eine Kopie als neues Objekt erzeugt. - Ein Objekt mit Feldern:
year(oderera+eraYear) undmonthodermonthCode. Optional istcalendar. Bei Kalendern, die nicht ISO sind, zusätzlichday. Andere Temporal-Objekte wiePlainDatewerden ebenfalls als Feldobjekt gelesen. - Ein String im Format RFC 9557 / ISO 8601, z. B.
"2024-03","2024-03-15"oder"2024-03-15T10:00[u-ca=iso8601]". Tag und Uhrzeit werden dabei ignoriert.
Im Gegensatz zum Konstruktor new Temporal.PlainYearMonth(isoYear, isoMonth), der nur ISO-Werte kennt, versteht from() auch Kalenderfelder wie monthCode und era. Mit der Option overflow legst du fest, ob ungültige Werte angepasst oder abgelehnt werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $info Pflicht | Temporal.PlainYearMonth | object | string | Die Quelle: ein PlainYearMonth, ein Objekt mit year/era+eraYear, month/monthCode, optional calendar und day, oder ein RFC-9557-String. |
|
| $options | object | undefined | undefined | Optionales Objekt mit der Eigenschaft overflow: "constrain" (Standard) setzt Werte außerhalb des Bereichs auf den nächsten gültigen Wert, z. B. Monat 13 auf 12. "reject" wirft dann einen RangeError. Die Option wirkt nur, wenn info ein Objekt ist. |
Rückgabewert
Temporal.PlainYearMonth-Objekt. Das gilt auch, wenn bereits ein PlainYearMonth übergeben wurde.Beispiele
Aus Objekt und String erzeugen
const a = Temporal.PlainYearMonth.from({ year: 2024, month: 3 });
const b = Temporal.PlainYearMonth.from('2024-03');
const c = Temporal.PlainYearMonth.from('2024-03-15T10:30'); // Tag und Uhrzeit werden ignoriert
console.log(a.toString());
console.log(b.equals(a));
console.log(c.toString());
Ungültige Werte: constrain oder reject
const angepasst = Temporal.PlainYearMonth.from({ year: 2024, month: 13 });
console.log(angepasst.toString()); // Monat wird auf 12 gesetzt
try {
Temporal.PlainYearMonth.from({ year: 2024, month: 13 }, { overflow: 'reject' });
} catch (err) {
console.log(err.constructor.name);
}
Wert aus <input type="month"> verarbeiten
// <input type="month" id="zeitraum" value="2024-11">
const input = document.querySelector('#zeitraum');
const zeitraum = Temporal.PlainYearMonth.from(input.value);
const naechster = zeitraum.add({ months: 2 });
console.log(`${zeitraum} hat ${zeitraum.daysInMonth} Tage`);
console.log(`Folgezeitraum: ${naechster}`);
Prüfen, ob eine Kreditkarte abgelaufen ist
const istAbgelaufen = (mmjj) => {
const [mm, jj] = mmjj.split('/').map(Number);
const ablauf = Temporal.PlainYearMonth.from(
{ year: 2000 + jj, month: mm },
{ overflow: 'reject' }
);
const heute = Temporal.Now.plainDateISO().toPlainYearMonth();
return Temporal.PlainYearMonth.compare(ablauf, heute) < 0;
};
console.log(istAbgelaufen('01/20'));
console.log(istAbgelaufen('12/99'));
// Wichtig · Fallstricke
- Browser-Unterstützung: Temporal ist noch neu. Es läuft in Firefox ab Version 139 und in aktuellen Chromium-Versionen. Safari und ältere Umgebungen brauchen ein Polyfill wie
@js-temporal/polyfillodertemporal-polyfill. Prüfe das mittypeof Temporal !== 'undefined'. - Standard ist
constrain: Ungültige Nutzereingaben wie Monat 13 werden ohne Fehlermeldung angepasst. Nutze bei der Validierung{ overflow: 'reject' }. - Strings werden immer streng geprüft: Die Option
overflowgilt für Strings nicht."2024-13"wirft immer einenRangeError. Strings mit UTC-KennzeichenZ(z. B."2024-03-01T00:00Z") werden abgelehnt, weil sie einen exakten Zeitpunkt meinen. - Kalender, die nicht ISO sind: Bei Strings mit
[u-ca=…]außeriso8601ist ein vollständiges Datum mit Tag nötig. Der Tag dient als Referenztag. Nutze bei solchen Kalendern bessermonthCode(z. B."M05L"für Schaltmonate) stattmonth. - Fehlertypen:
TypeError, wenninfoweder Objekt noch String ist oder Pflichtfelder fehlen.RangeErrorbei ungültigen Werten oder Strings. - Kein
Date-Objekt übergeben: Es wird nicht unterstützt. Wandle es vorher um, z. B. überdate.toTemporalInstant().