Signatur
Beschreibung
Der Konstruktor Temporal.PlainDateTime() erzeugt einen Datums- und Uhrzeitwert, der zu keiner Zeitzone gehört. Solche Werte entsprechen dem, was auf einer Wanduhr oder in einem Kalender steht, zum Beispiel „15. März 2024, 14:30 Uhr“. Sie bezeichnen aber keinen exakten Zeitpunkt auf der Zeitachse. Typische Anwendungen sind Termine, Öffnungszeiten, Formulareingaben (<input type="datetime-local">) und alle Fälle, in denen die Zeitzone keine Rolle spielt oder später festgelegt wird.
Alle Werte werden als ganze Zahlen im ISO-8601-Kalender übergeben. Anders als beim alten Date beginnt month bei 1 (Januar = 1). Nur year, month und day sind Pflicht. Alle Zeitangaben sind standardmäßig 0, damit steht das Objekt auf Mitternacht. Mit dem optionalen Parameter calendar hängst du einen anderen Kalender an (z. B. "hebrew" oder "japanese"). Die Zahlen werden trotzdem als ISO-Werte ausgewertet.
Der Konstruktor ist streng: Werte außerhalb des gültigen Bereichs (etwa der 30. Februar oder Stunde 24) lösen einen RangeError aus. Sie werden nicht still korrigiert. In der Praxis nimmt man für Eingaben aus Texten oder Objekten meist Temporal.PlainDateTime.from(). Diese Methode kann auch Monatscodes und nicht-ISO-Kalenderfelder verarbeiten und mit overflow: "constrain" ungültige Werte auf den nächsten gültigen Wert setzen. Das entstehende Objekt ist unveränderlich (immutable). Methoden wie add() oder with() liefern immer neue Instanzen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $year Pflicht | number | ISO-Jahr als ganze Zahl, auch negativ oder 0 möglich (astronomische Jahreszählung). | |
| $month Pflicht | number | ISO-Monat von 1 bis 12 (nicht 0-basiert wie bei Date). |
|
| $day Pflicht | number | ISO-Tag im Monat von 1 bis 31, je nach Monat und Schaltjahr. |
|
| $hour | number | 0 | Stunde von 0 bis 23. |
| $minute | number | 0 | Minute von 0 bis 59. |
| $second | number | 0 | Sekunde von 0 bis 59. Schaltsekunden (60) werden nicht unterstützt. |
| $millisecond | number | 0 | Millisekunde von 0 bis 999. |
| $microsecond | number | 0 | Mikrosekunde von 0 bis 999. |
| $nanosecond | number | 0 | Nanosekunde von 0 bis 999. |
| $calendar | string | "iso8601" | Kalender-Kennung wie "iso8601", "gregory", "hebrew" oder "japanese". Groß- und Kleinschreibung wird ignoriert. |
Rückgabewert
Temporal.PlainDateTime-Objekt mit den übergebenen Datums- und Zeitwerten.Beispiele
Termin ohne Zeitzone anlegen
const meeting = new Temporal.PlainDateTime(2024, 3, 15, 14, 30);
console.log(meeting.toString());
console.log(meeting.month, meeting.dayOfWeek); // Monat 1-basiert, Montag = 1
console.log(meeting.toLocaleString('de-DE'));
Nur Datum angeben – Uhrzeit ist Mitternacht
const start = new Temporal.PlainDateTime(2025, 1, 1);
const ende = start.add({ days: 2, hours: 8 });
console.log(start.toString());
console.log(ende.toString());
console.log(start.toString()); // Original bleibt unverändert
Ungültige Werte: Konstruktor vs. from()
try {
new Temporal.PlainDateTime(2024, 2, 30, 10, 0);
} catch (err) {
console.log(err.name);
}
// from() kann den Wert stattdessen auf den nächsten gültigen setzen
const korrigiert = Temporal.PlainDateTime.from(
{ year: 2024, month: 2, day: 30, hour: 10 },
{ overflow: 'constrain' }
);
console.log(korrigiert.toString());
Anderen Kalender anhängen und in Zeitzone umwandeln
const dt = new Temporal.PlainDateTime(2024, 3, 15, 9, 0, 0, 0, 0, 0, 'hebrew');
console.log(dt.toString());
console.log(dt.year, dt.monthCode); // Werte im hebräischen Kalender
// Erst mit einer Zeitzone wird ein exakter Zeitpunkt daraus
const zoned = new Temporal.PlainDateTime(2024, 3, 15, 9, 0)
.toZonedDateTime('Europe/Berlin');
console.log(zoned.toString());