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.
| Aufgabe | Code | Ergebnis |
|---|---|---|
| Aktuelle Zeit (ms) | Date.now() | 1700000000000 |
| Aktuelle Zeit (s) | Math.floor(Date.now() / 1000) | 1700000000 |
| Sekunden → Date | new Date(s * 1000) | Date-Objekt |
| Millisekunden → Date | new Date(ms) | Date-Objekt |
| Date → ms | date.getTime() | 1700000000000 |
| Date → ISO 8601 | date.toISOString() | 2023-11-15T06:13:20.000Z |
| ISO-String → ms | Date.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.