Signatur
Beschreibung
Die statische Methode Date.UTC() nimmt dieselben Komponenten entgegen wie der Date-Konstruktor (Jahr, Monat, Tag, Stunde …). Der Unterschied: Sie werden immer als UTC interpretiert und nicht in der lokalen Zeitzone der Laufzeitumgebung. Zurück kommt kein Date-Objekt, sondern eine Zahl, nämlich der Zeitstempel in Millisekunden seit der Unix-Epoche.
Damit eignet sich Date.UTC() gut, um Zeitpunkte unabhängig von der Zeitzone festzulegen, etwa für Server-Kommunikation, Tests mit festen Zeitpunkten, Datumsberechnungen ohne Sommerzeitprobleme oder den Vergleich von Kalendertagen. Das Ergebnis lässt sich direkt an new Date(timestamp) übergeben.
Wie beim Konstruktor ist der Monat nullbasiert (0 = Januar, 11 = Dezember). Werte außerhalb des üblichen Bereichs werden „überlaufend“ verrechnet: Date.UTC(2024, 0, 32) ergibt z. B. den 1. Februar 2024. Jahreszahlen von 0 bis 99 werden als 1900–1999 gedeutet.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $year Pflicht | number | Das Jahr. Werte von 0 bis 99 werden als 1900–1999 gedeutet. |
|
| $monthIndex | number | 0 | Monat, nullbasiert (0 = Januar bis 11 = Dezember). Seit ES2017 optional. |
| $day | number | 1 | Tag im Monat (1–31). |
| $hours | number | 0 | Stunde (0–23). |
| $minutes | number | 0 | Minuten (0–59). |
| $seconds | number | 0 | Sekunden (0–59). |
| $milliseconds | number | 0 | Millisekunden (0–999). |
Rückgabewert
NaN, wenn ein Argument nicht in eine gültige Zahl umgewandelt werden kann oder das Ergebnis außerhalb des gültigen Bereichs liegt (±8,64 × 1015 ms).Beispiele
Zeitstempel für einen festen UTC-Zeitpunkt
const ts = Date.UTC(2024, 2, 15, 12, 30); // 15. März 2024, 12:30 UTC
console.log(ts);
console.log(new Date(ts).toISOString());
Unterschied zum lokalen Date-Konstruktor
// Angenommen, die lokale Zeitzone ist Europe/Berlin (UTC+1 im Januar)
const lokal = new Date(2024, 0, 1).getTime();
const utc = Date.UTC(2024, 0, 1);
console.log((lokal - utc) / 3_600_000, 'Stunden Differenz');
Tage zwischen zwei Daten ohne Sommerzeitfehler
const tageZwischen = (a, b) => {
const utcA = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());
const utcB = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate());
return Math.round((utcB - utcA) / 86_400_000);
};
console.log(tageZwischen(new Date(2024, 2, 1), new Date(2024, 3, 1)));
Überlauf und Monatsende ermitteln
// Tag 0 des Folgemonats = letzter Tag des aktuellen Monats
const letzterTag = (jahr, monat) =>
new Date(Date.UTC(jahr, monat + 1, 0)).getUTCDate();
console.log(letzterTag(2024, 1)); // Februar 2024
console.log(new Date(Date.UTC(2024, 0, 32)).toISOString());
// Wichtig · Fallstricke
- Nullbasierter Monat:
Date.UTC(2024, 12, 1)ist der 1. Januar 2025, nicht der 1. Dezember 2024. Das ist die häufigste Fehlerquelle. - Rückgabewert ist eine Zahl: Um ein Datumsobjekt zu erhalten, das Ergebnis in
new Date(...)einpacken. - Zweistellige Jahre:
Date.UTC(24, 0)ergibt 1924. Für Jahre von 0 bis 99 stattdessensetUTCFullYear()verwenden. - Nur ein Argument:
Date.UTC(2024)liefert seit ES2017 den 1. Januar 2024. Sehr alte Engines gaben dabeiNaNzurück. Ohne Argumente ist das Ergebnis immerNaN. - Für die Ausgabe von UTC-Werten die
getUTC*()-Methoden odertoISOString()nutzen, nichtgetHours()und Co., die lokale Zeit liefern. - Kompatibilität: Die Methode wird in allen Browsern und in Node.js unterstützt. Für komplexe Zeitzonenlogik lohnt sich ein Blick auf die kommende
Temporal-API.