Signatur
Beschreibung
Temporal.PlainDateTime ist Teil der modernen Temporal API und stellt eine Kombination aus Datum und Uhrzeit dar, die keinerlei Zeitzonen-Information enthält. Das Objekt eignet sich für Szenarien, in denen die Ortszeit relevant ist, aber keine Zeitzonenkonvertierung gewünscht wird – z. B. Terminerinnerungen, Geburtstage mit Uhrzeit oder Arbeitszeiten.
Im Gegensatz zu Date aus ES5 ist Temporal.PlainDateTime unveränderlich (immutable): Alle Methoden, die das Datum oder die Uhrzeit verändern, geben stets ein neues Objekt zurück. Dadurch werden häufige Fehlerquellen wie unbeabsichtigte Mutation vermieden.
Der Konstruktor erwartet numerische Felder in ISO-8601-Reihenfolge (Jahr, Monat, Tag, Stunde, Minute, Sekunde, Millisekunde, Mikrosekunde, Nanosekunde). Alternativ kann das Objekt aus einem ISO-8601-String per Temporal.PlainDateTime.from() erzeugt werden. Verschiedene Kalender-Systeme werden über den optionalen calendar-Parameter unterstützt.
Über .toZonedDateTime(timeZone) kann ein Temporal.PlainDateTime in ein zeitzonen-bewusstes Temporal.ZonedDateTime umgewandelt werden. Für reine Datums- bzw. Zeitoperationen stehen auch Temporal.PlainDate und Temporal.PlainTime zur Verfügung.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $isoYear Pflicht | number | — | Das Jahr als ganze Zahl nach ISO 8601, z. B. 2024. |
| $isoMonth Pflicht | number | — | Der Monat als Ganzzahl von 1 (Januar) bis 12 (Dezember). |
| $isoDay Pflicht | number | — | Der Tag des Monats als Ganzzahl von 1 bis 31. |
| $isoHour | number | 0 | Stunde von 0 bis 23. |
| $isoMinute | number | 0 | Minute von 0 bis 59. |
| $isoSecond | number | 0 | Sekunde von 0 bis 59. |
| $isoMillisecond | number | 0 | Millisekunde von 0 bis 999. |
| $isoMicrosecond | number | 0 | Mikrosekunde von 0 bis 999. |
| $isoNanosecond | number | 0 | Nanosekunde von 0 bis 999. Temporal unterstützt Nanosekunden-Präzision. |
| $calendar | string|Temporal.Calendar | "iso8601" | Kalender-System als String (z. B. "gregory", "islamic") oder Temporal.Calendar-Objekt. Standard ist der gregorianische ISO-Kalender. |
Rückgabewert
Temporal.PlainDateTime-Instanz, die das angegebene Datum und die angegebene Zeit repräsentiert.Beispiele
Einfache Instanz erstellen und Felder auslesen
const dt = new Temporal.PlainDateTime(2024, 6, 15, 9, 30, 0);
console.log(dt.year); // 2024
console.log(dt.month); // 6
console.log(dt.day); // 15
console.log(dt.hour); // 9
console.log(dt.minute); // 30
console.log(dt.toString()); // "2024-06-15T09:30:00"
Aus ISO-String erzeugen und mit Zeitzone kombinieren
// PlainDateTime aus einem String parsen
const dt = Temporal.PlainDateTime.from("2024-12-24T18:00:00");
console.log(dt.toString()); // "2024-12-24T18:00:00"
// In ein zeitzonenbewusstes ZonedDateTime umwandeln
const zdt = dt.toZonedDateTime("Europe/Berlin");
console.log(zdt.toString()); // "2024-12-24T18:00:00+01:00[Europe/Berlin]"
Datum und Uhrzeit arithmetisch verändern
const meeting = Temporal.PlainDateTime.from("2024-03-10T14:00:00");
// 3 Tage und 90 Minuten addieren
const later = meeting
.add({ days: 3 })
.add({ minutes: 90 });
console.log(later.toString()); // "2024-03-13T15:30:00"
// Differenz zwischen zwei Terminen berechnen
const deadline = Temporal.PlainDateTime.from("2024-03-20T09:00:00");
const diff = meeting.until(deadline);
console.log(`${diff.days} Tage und ${diff.hours} Stunden`); // "9 Tage und 19 Stunden"
Vergleich und Sortierung von Terminen
const termine = [
Temporal.PlainDateTime.from("2024-05-20T10:00"),
Temporal.PlainDateTime.from("2024-04-01T08:30"),
Temporal.PlainDateTime.from("2024-04-01T07:00"),
];
// Aufsteigend sortieren
termine.sort(Temporal.PlainDateTime.compare);
termine.forEach(t => console.log(t.toString()));
// Wichtig · Fallstricke
Browser-Kompatibilität: Die Temporal API befindet sich aktuell im TC39-Stage-3-Prozess. Natives Browser-Support ist noch nicht flächendeckend verfügbar. Für Produktivanwendungen sollte der offizielle Polyfill @js-temporal/polyfill verwendet werden.
- Kein UTC-Bezug:
Temporal.PlainDateTimespeichert weder UTC-Offset noch Zeitzone. Es handelt sich um eine „naive" Datums-/Zeitdarstellung – ideal für lokale Geschäftslogik, aber ungeeignet für globale Zeitvergleiche. - Nanosekunden-Präzision: Im Gegensatz zu
Date, das nur Millisekunden kennt, unterstütztTemporal.PlainDateTimeMikro- und Nanosekunden. - Unveränderlichkeit: Methoden wie
.add(),.subtract()und.with()verändern das Ausgangsobjekt nicht, sondern geben immer eine neue Instanz zurück. - Vergleich: Für Vergleiche die statische Methode
Temporal.PlainDateTime.compare(a, b)nutzen (gibt-1,0oder1zurück), da der===-Operator nur Referenzgleichheit prüft. - Überlauf: Ungültige Feldwerte (z. B. Monat 13) werden je nach Option
overflow: "reject"oder"constrain"behandelt.