Start · Sprachen · JavaScript · Referenz · Temporal.PlainYearMonth.from()

Temporal.PlainYearMonth.from()

Methode

Erstellt ein neues <code>Temporal.PlainYearMonth</code> aus einem vorhandenen PlainYearMonth-Objekt, einem Objekt mit Jahr und Monat oder einem RFC-9557-String.

seit JavaScript ES2026 (Temporal, Stage 4) – Firefox 139+, Chrome Kategorie: method-property

Signatur

Temporal.PlainYearMonth.from(info, options)

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 (oder era + eraYear) und month oder monthCode. Optional ist calendar. Bei Kalendern, die nicht ISO sind, zusätzlich day. Andere Temporal-Objekte wie PlainDate werden 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

Typ
Temporal.PlainYearMonth
Beschreibung
Ein neues 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());
2024-03 true 2024-03

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);
}
2024-12 RangeError

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}`);
2024-11 hat 30 Tage Folgezeitraum: 2025-01

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'));
true false

// 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/polyfill oder temporal-polyfill. Prüfe das mit typeof 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 overflow gilt für Strings nicht. "2024-13" wirft immer einen RangeError. Strings mit UTC-Kennzeichen Z (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ßer iso8601 ist ein vollständiges Datum mit Tag nötig. Der Tag dient als Referenztag. Nutze bei solchen Kalendern besser monthCode (z. B. "M05L" für Schaltmonate) statt month.
  • Fehlertypen: TypeError, wenn info weder Objekt noch String ist oder Pflichtfelder fehlen. RangeError bei ungültigen Werten oder Strings.
  • Kein Date-Objekt übergeben: Es wird nicht unterstützt. Wandle es vorher um, z. B. über date.toTemporalInstant().