Start · Sprachen · JavaScript · Referenz · Temporal.PlainDate.prototype.toString()

Temporal.PlainDate.prototype.toString()

Methode

Gibt das Datum einer <code>Temporal.PlainDate</code>-Instanz als String im Format RFC 9557 / ISO 8601 zurück, z. B. <code>"2024-03-15"</code>, auf Wunsch mit Kalender-Annotation.

seit JavaScript ES2026 (Temporal); Firefox 139+, Chrome/Edge 144+, Kategorie: method-property

Signatur

Temporal.PlainDate.prototype.toString(options)

Beschreibung

Die Methode toString() wandelt ein Temporal.PlainDate in einen maschinenlesbaren String der Form JJJJ-MM-TT um. Das Format folgt RFC 9557, einer Erweiterung von ISO 8601 bzw. RFC 3339, die zusätzliche Angaben in eckigen Klammern erlaubt, etwa den Kalender ([u-ca=japanese]).

Die Ausgabe ist umkehrbar: Temporal.PlainDate.from(date.toString()) ergibt wieder ein gleichwertiges Datum. Deshalb eignet sich die Methode für die Serialisierung, z. B. in JSON, URL-Parametern, Datenbankfeldern oder dem Attribut value von <input type="date">. Wenn ein String erwartet wird, etwa in Template-Literalen oder bei String(date), wird toString() automatisch aufgerufen. toJSON() liefert dasselbe Ergebnis wie toString() ohne Optionen.

Mit der Option calendarName legst du fest, ob der Kalender im String angegeben wird. Im Normalfall ("auto") wird er nur bei Kalendern ungleich iso8601 angehängt. Für Texte, die Menschen lesen sollen, verwende stattdessen toLocaleString().

Parameter

Name Typ Default Beschreibung
$options object undefined Optionales Objekt mit folgender Eigenschaft:
$options.calendarName "auto" | "always" | "never" | "critical" "auto" Legt fest, ob die Kalender-Annotation ausgegeben wird.
  • "auto": nur wenn der Kalender nicht iso8601 ist
  • "always": immer, auch [u-ca=iso8601]
  • "never": nie
  • "critical": immer, mit Kritisch-Markierung [!u-ca=…]

Rückgabewert

Typ
string
Beschreibung
Das Datum im Format RFC 9557, z. B. "2024-03-15" oder "2024-03-15[u-ca=japanese]".

Beispiele

Standardausgabe eines Datums

const date = Temporal.PlainDate.from({ year: 2024, month: 3, day: 5 });
console.log(date.toString());
console.log(`Termin: ${date}`); // toString() wird automatisch aufgerufen
2024-03-05 Termin: 2024-03-05

Kalender-Annotation mit calendarName steuern

const iso = Temporal.PlainDate.from("2021-08-01");
const jp = iso.withCalendar("japanese");

console.log(iso.toString());                               // auto
console.log(iso.toString({ calendarName: "always" }));
console.log(iso.toString({ calendarName: "critical" }));
console.log(jp.toString());                                // auto, Nicht-ISO-Kalender
console.log(jp.toString({ calendarName: "never" }));
2021-08-01 2021-08-01[u-ca=iso8601] 2021-08-01[!u-ca=iso8601] 2021-08-01[u-ca=japanese] 2021-08-01

Umkehrbare Serialisierung (JSON, URL, Formularfeld)

const start = Temporal.Now.plainDateISO().add({ days: 7 });

// Für das Formularfeld <input type="date">
const value = start.toString();

// Als URL-Parameter
const params = new URLSearchParams({ from: start.toString() });

// Wieder einlesen
const parsed = Temporal.PlainDate.from(params.get("from"));
console.log(parsed.equals(start));
console.log(JSON.stringify({ start }) === `{"start":"${value}"}`);
true true

Jahre außerhalb von 0000–9999

console.log(Temporal.PlainDate.from({ year: 12345, month: 1, day: 1 }).toString());
console.log(Temporal.PlainDate.from({ year: -44, month: 3, day: 15 }).toString());
+012345-01-01 -000044-03-15

// Wichtig · Fallstricke

  • Browser-Unterstützung: Temporal ist neu. Es ist in Firefox ab 139 und in Chromium-Browsern ab 144 verfügbar, in Safari aber noch nicht. Prüfe mit typeof Temporal !== "undefined", ob es vorhanden ist, oder setze ein Polyfill ein (z. B. @js-temporal/polyfill oder temporal-polyfill).
  • Bei calendarName: "never" geht in einem Nicht-ISO-Kalender die Kalenderangabe verloren. Beim erneuten Einlesen mit from() entsteht dann ein ISO-Datum. Für verlustfreie Speicherung bleib beim Normalfall "auto".
  • Jahre vor 0000 oder nach 9999 werden sechsstellig mit Vorzeichen ausgegeben (+012345, -000044). Manche Systeme außerhalb von JavaScript verstehen dieses Format nicht.
  • Ein ungültiger Wert für calendarName löst einen RangeError aus. Ist options weder ein Objekt noch undefined, wird ein TypeError ausgelöst.
  • Die Ausgabe ist nicht an die Sprache oder Region angepasst. Für Anzeigen wie „5. März 2024“ verwende toLocaleString() oder Intl.DateTimeFormat.