Signatur
Beschreibung
toString() wandelt ein Temporal.PlainDateTime in einen maschinenlesbaren String nach RFC 9557 um. Dieses Format erweitert ISO 8601 bzw. RFC 3339 um Annotationen in eckigen Klammern. Das Ergebnis hat die Form YYYY-MM-DDTHH:mm:ss.sssssssss, bei Bedarf gefolgt von einer Kalender-Annotation wie [u-ca=hebrew]. Weil ein PlainDateTime keine Zeitzone hat, enthält der String weder einen Offset noch eine Zeitzonen-Annotation.
Die Methode eignet sich gut zum Speichern, Übertragen und Serialisieren, etwa in Datenbanken, URLs, localStorage oder JSON. Den String kannst du mit Temporal.PlainDateTime.from() verlustfrei wieder einlesen. Für die Anzeige im Browser nimmst du dagegen toLocaleString(), denn das liefert eine Darstellung passend zur Sprache des Nutzers.
Über das optionale options-Objekt legst du die Genauigkeit fest: mit smallestUnit oder fractionalSecondDigits bestimmst du, wie viele Stellen ausgegeben werden. Mit roundingMode legst du fest, wie gerundet wird (Standard: "trunc", also abschneiden). Mit calendarName steuerst du, ob die Kalender-Annotation erscheint. Ohne Optionen werden Sekunden immer ausgegeben, Nachkommastellen aber nur, wenn sie nicht null sind.
Auch String(dt), Template-Literale und toJSON() (also JSON.stringify) liefern dasselbe Ergebnis wie toString() ohne Optionen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $options | object | {} | Optionales Objekt mit den folgenden Eigenschaften. |
| $options.calendarName | "auto" | "always" | "never" | "critical" | "auto" | "auto": Annotation nur bei einem anderen Kalender als iso8601. "always": immer [u-ca=…]. "never": nie. "critical": immer, mit Kritisch-Flag [!u-ca=…]. |
| $options.fractionalSecondDigits | "auto" | number | "auto" | Anzahl der Nachkommastellen der Sekunden, von 0 bis 9. Bei "auto" werden Nullen am Ende weggelassen. Wird ignoriert, wenn smallestUnit gesetzt ist. |
| $options.smallestUnit | "minute" | "second" | "millisecond" | "microsecond" | "nanosecond" | Kleinste Einheit, die ausgegeben wird. Hat Vorrang vor fractionalSecondDigits. Bei "minute" fallen die Sekunden weg. Pluralformen wie "seconds" sind ebenfalls erlaubt. |
|
| $options.roundingMode | "trunc" | "floor" | "ceil" | "expand" | "halfExpand" | "halfTrunc" | "halfEven" | "halfFloor" | "halfCeil" | "trunc" | Rundungsverfahren für die weggelassenen Stellen. Für kaufmännisches Runden nimmst du "halfExpand". |
Rückgabewert
"2021-08-01T12:34:56" oder "2021-08-01T12:34:56.5[u-ca=japanese]".Beispiele
Standardausgabe und Round-Trip
const dt = Temporal.PlainDateTime.from("2021-08-01T12:34:56.5");
console.log(dt.toString());
// Ganze Minuten: Die Sekunden werden trotzdem ausgegeben
const meeting = new Temporal.PlainDateTime(2024, 3, 15, 9, 30);
console.log(`${meeting}`);
// Verlustfrei wieder einlesen
const copy = Temporal.PlainDateTime.from(dt.toString());
console.log(copy.equals(dt));
Genauigkeit und Rundung steuern
const dt = Temporal.PlainDateTime.from("2021-12-31T23:59:59.789");
console.log(dt.toString({ smallestUnit: "minute" }));
console.log(dt.toString({ fractionalSecondDigits: 0 }));
console.log(dt.toString({ fractionalSecondDigits: 6 }));
// Runden kann auf den nächsten Tag oder ins nächste Jahr übertragen
console.log(dt.toString({ smallestUnit: "second", roundingMode: "halfExpand" }));
Kalender-Annotation
const dt = Temporal.PlainDateTime.from("2021-08-01T12:00");
console.log(dt.toString({ calendarName: "always" }));
console.log(dt.toString({ calendarName: "critical" }));
const jp = dt.withCalendar("japanese");
console.log(jp.toString());
console.log(jp.toString({ calendarName: "never" }));
Formularwert für <input type="datetime-local">
const now = Temporal.Now.plainDateTimeISO();
// datetime-local erwartet YYYY-MM-DDTHH:mm (ohne Kalender-Annotation)
const input = document.querySelector("#termin");
input.value = now.toString({ smallestUnit: "minute", calendarName: "never" });
// Wert zurücklesen
input.addEventListener("change", () => {
const chosen = Temporal.PlainDateTime.from(input.value);
console.log(chosen.toString());
});