Timestamps in JavaScript

Mit Unix-Timestamps in JavaScript arbeiten

Alles, was du brauchst, um in JavaScript mit Unix-Timestamps zu arbeiten — die aktuelle Zeit holen, Dates aus Timestamps erzeugen, für jede Zeitzone formatieren und gängige Fehler vermeiden — mit einem Copy-Paste-Spickzettel und Links zu den ausführlichen Guides.

JavaScript-Timestamp-Spickzettel

JavaScript arbeitet in Millisekunden: Date.now() und der Date-Konstruktor nutzen beide Millisekunden seit der Unix-Epoche, während die meisten anderen Systeme Sekunden nutzen — fast jede JavaScript-Timestamp-Aufgabe läuft also darauf hinaus, sich an ein × 1000 oder ÷ 1000 zu erinnern. Die Tabelle unten ist die Schnellreferenz; die folgenden Abschnitte erklären jede Operation, und die ausführlichen Guides behandeln Zeitzonen und die Temporal-API vollständig.

AufgabeCodeErgebnis
Aktuelle Zeit (ms)Date.now()1700000000000
Aktuelle Zeit (s)Math.floor(Date.now() / 1000)1700000000
Sekunden → Datenew Date(s * 1000)Date-Objekt
Millisekunden → Datenew Date(ms)Date-Objekt
Date → msdate.getTime()1700000000000
Date → ISO 8601date.toISOString()2023-11-15T06:13:20.000Z
ISO-String → msDate.parse(str)1700000000000

Den aktuellen Unix-Timestamp holen

JavaScript bietet mehrere gleichwertige Wege, die aktuelle Zeit als numerischen Timestamp zu holen. Alle liefern die Anzahl der Millisekunden seit der Unix-Epoche.

  • Date.now() → der schnellste und lesbarste — 1700000000000 (Millisekunden)
  • Math.floor(Date.now() / 1000) → Unix-Timestamp in Sekunden — 1700000000
  • +new Date() → dasselbe wie Date.now(), mit dem unären Plus-Operator
  • new Date().getTime() → expliziter Methodenaufruf, gleiches Ergebnis wie Date.now()

Ein Date-Objekt aus einem Unix-Timestamp erzeugen

Der Date-Konstruktor akzeptiert Millisekunden seit der Epoche. Multipliziere einen sekundenbasierten Timestamp immer mit 1000, bevor du ihn dem Konstruktor übergibst.

  • new Date(1700000000 * 1000) → aus Sekunden (häufigster Fall)
  • new Date(1700000000000) → aus Millisekunden (JavaScript-APIs, Java)
  • new Date(Date.now()) → aktuelle Zeit als Date-Objekt
  • new Date(0) → die Unix-Epoche: 1. Januar 1970 00:00:00 UTC

Daten formatieren — eingebaute String-Methoden

Das Date-Objekt hat mehrere eingebaute String-Konvertierungsmethoden. Jede erzeugt ein anderes Format.

  • .toISOString() → '2023-11-15T06:13:20.000Z' — ISO 8601, immer UTC, maschinenlesbar
  • .toUTCString() → 'Wed, 15 Nov 2023 06:13:20 GMT' — RFC 7231, menschenlesbares UTC
  • .toString() → String in lokaler Zeitzone mit vollem Zonennamen
  • .toLocaleString() → gebietsschema-bewusstes Format in der lokalen Zeitzone des Nutzers

Zeitzonenbewusste Formatierung

Für zeitzonenbewusste Formatierung nutze Intl.DateTimeFormat mit einer expliziten timeZone — es wendet die Sommerzeit automatisch an und braucht keine Bibliothek. Zeitzonen sind ein eigenes, tiefes Thema; der eigene JavaScript-Zeitzonen-Guide behandelt formatToParts, das Erkennen der Nutzerzone und die schwierige Richtung Wanduhr-zu-UTC.

  • new Intl.DateTimeFormat('en-US', { timeZone: 'America/New_York', dateStyle: 'full', timeStyle: 'long' }).format(date)
  • date.toLocaleString('en-GB', { timeZone: 'Europe/London', hour12: false })

Einen Datumsstring zurück in einen Unix-Timestamp wandeln

Um in die Gegenrichtung zu gehen — von einem Datumsstring zu einem Unix-Timestamp — nutze Date.parse() oder übergib den String dem Date-Konstruktor.

  • new Date('2023-11-15T06:13:20Z').getTime() / 1000 → Unix-Sekunden aus ISO 8601 UTC
  • new Date('2023-11-15T01:13:20-05:00').getTime() → Unix-Millisekunden aus ISO mit Offset
  • Date.parse('2023-11-15T06:13:20Z') → dasselbe wie new Date(...).getTime()
  • Nutze für vorhersehbares Parsen immer das ISO-8601-Format mit expliziter Zeitzone

Häufige Fallstricke

Das sind die häufigsten Fehler, die JavaScript-Entwickler mit Daten und Timestamps machen:

  • new Date(1700000000) — fehlendes × 1000 wandelt in das Jahr ~1970 statt 2023
  • getMonth() liefert 0–11, nicht 1–12 — beim Anzeigen immer 1 addieren
  • new Date('2024-01-01') ist UTC-Mitternacht; new Date('2024/01/01') ist lokale Mitternacht
  • new Date(2024, 0, 1) = 1. Januar (der Monat ist auch im Konstruktor 0-indiziert)
  • Um 'morgen' zu bekommen, kann das Addieren von 86400000 ms an DST-Grenzen scheitern — nutze stattdessen setDate(d.getDate() + 1)

Die Temporal-API — moderner Ersatz für Date

TC39s Temporal-API hat Stage 4 erreicht und wird in modernen Browsern und Node.js ausgeliefert. Sie behebt Dates Kernschwächen — sie ist unveränderlich, nanosekundengenau und zeitzonenbewusst — und Temporal.Instant ist ihr Unix-Timestamp-Typ. Die ausgelieferte API konvertiert Epochen in Millisekunden oder Nanosekunden (das ältere fromEpochSeconds wurde entfernt), multipliziere Unix-Sekunden also mit 1000. Den vollständigen API-Umfang findest du im ausführlichen Temporal-Guide.

  • Temporal.Now.instant() — der aktuelle Zeitpunkt, mit Nanosekunden-Präzision
  • Temporal.Instant.fromEpochMilliseconds(Date.now()) — aus einem JS-Millisekunden-Timestamp
  • Temporal.Instant.fromEpochMilliseconds(1700000000 * 1000) — aus Unix-Sekunden (× 1000)
  • Temporal.ZonedDateTime — Zeitpunkt + IANA-Zeitzone, der Typ, der Date hätte sein sollen
  • Ausgeliefert in Firefox 139+, Chrome 144+, Node.js 26+; Safari in Technology Preview; Polyfill für den Rest

Weiterführendes

FAQ

Wie hole ich in JavaScript einen Unix-Timestamp in Sekunden?
Verwende Math.floor(Date.now() / 1000). Date.now() liefert Millisekunden, also durch 1000 teilen und das Ergebnis abrunden, um ganze Unix-Sekunden zu erhalten.
Wie wandle ich in JavaScript einen Unix-Timestamp in ein lesbares Datum um?
Multipliziere Sekunden mit 1000, übergib sie dem Date-Konstruktor und formatiere dann: new Date(1700000000 * 1000).toISOString() ergibt "2023-11-14T22:13:20.000Z". Für eine bestimmte Zeitzone nutze Intl.DateTimeFormat mit einer timeZone-Option.
Warum zeigt new Date() mit einem Unix-Timestamp 1970?
Der Date-Konstruktor erwartet Millisekunden. Ein 10-stelliger Sekunden-Timestamp muss mit 1000 multipliziert werden: new Date(seconds * 1000).
Wie formatiere ich ein JavaScript-Datum für eine bestimmte Zeitzone?
Verwende Intl.DateTimeFormat mit einer expliziten timeZone-Option, etwa new Intl.DateTimeFormat('en-US', { timeZone: 'America/New_York' }). Es wendet die Sommerzeit automatisch an und braucht keine externe Bibliothek.
Sollte ich Date oder Temporal verwenden?
Für neuen Code, wo die Laufzeit es unterstützt, bevorzuge Temporal — es ist unveränderlich, zeitzonenbewusst und vermeidet Dates Fallstricke. Date bleibt für einfache Epoch-Millisekunden-Arbeit in Ordnung und ist weiterhin am breitesten unterstützt.