Start · Sprachen · JavaScript · Referenz · Temporal.PlainDateTime

Temporal.PlainDateTime

Klasse

Repräsentiert ein Kalenderdatum kombiniert mit einer Wanduhrzeit – ohne Zeitzonen-Kontext.

seit JavaScript Stage 3 Proposal (Temporal API) – Polyfill verfügb Kategorie: core

Signatur

class Temporal.PlainDateTime

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

Typ
Temporal.PlainDateTime
Beschreibung
Eine neue, unveränderliche 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"
2024 6 15 9 30 "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]"
"2024-12-24T18:00:00" "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"
"2024-03-13T15:30:00" "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()));
"2024-04-01T07:00:00" "2024-04-01T08:30:00" "2024-05-20T10:00:00"

// 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.PlainDateTime speichert 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ützt Temporal.PlainDateTime Mikro- 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, 0 oder 1 zurü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.