Mit Unix-Timestamps in JavaScript arbeiten
Alles, was du für die Arbeit mit Unix-Timestamps in JavaScript brauchst — die aktuelle Zeit holen, Dates aus Timestamps erzeugen, für jede Zeitzone formatieren und häufige Fehler vermeiden.
Den aktuellen Unix-Timestamp holen
JavaScript bietet mehrere gleichwertige Wege, die aktuelle Zeit als numerischen Timestamp zu erhalten. Alle liefern die Anzahl der Millisekunden seit der Unix-Epoch.
- Date.now() → the fastest and most readable — 1700000000000 (milliseconds)
- Math.floor(Date.now() / 1000) → Unix timestamp in seconds — 1700000000
- +new Date() → same as Date.now(), using the unary plus operator
- new Date().getTime() → explicit method call, same result as Date.now()
Ein Date-Objekt aus einem Unix-Timestamp erstellen
Der Date-Konstruktor erwartet Millisekunden seit der Epoch. Multipliziere einen Sekunden-Timestamp immer mit 1000, bevor du ihn an den Konstruktor übergibst.
- new Date(1700000000 * 1000) → from seconds (most common case)
- new Date(1700000000000) → from milliseconds (JavaScript APIs, Java)
- new Date(Date.now()) → current time as a Date object
- new Date(0) → the Unix epoch: January 1, 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, always UTC, machine-readable
- .toUTCString() → 'Wed, 15 Nov 2023 06:13:20 GMT' — RFC 7231, human-readable UTC
- .toString() → local timezone string with full zone name
- .toLocaleString() → locale-aware format in the user's local timezone
Zeitzonenbewusstes Formatieren mit Intl.DateTimeFormat
Für konsistentes, zeitzonenbewusstes Formatieren ohne externe Bibliotheken nutze die API Intl.DateTimeFormat. Sie ist in allen modernen Browsern und in Node.js 13+ verfügbar.
- new Intl.DateTimeFormat('en-US', { timeZone: 'America/New_York', dateStyle: 'full', timeStyle: 'long' }).format(date)
- date.toLocaleString('en-GB', { timeZone: 'Europe/London', hour12: false })
- new Intl.DateTimeFormat('zh-CN', { timeZone: 'Asia/Shanghai' }).format(date)
- new Intl.DateTimeFormat('en-CA', { timeZone: tz }).formatToParts(date) → array of {type, value} parts for custom layouts
Einen Datums-String zurück in einen Unix-Timestamp wandeln
Um in die Gegenrichtung zu gehen — von einem Datums-String zu einem Unix-Timestamp — nutze Date.parse() oder übergib den String an den Date-Konstruktor.
- new Date('2023-11-15T06:13:20Z').getTime() / 1000 → Unix seconds from ISO 8601 UTC
- new Date('2023-11-15T01:13:20-05:00').getTime() → Unix milliseconds from ISO with offset
- Date.parse('2023-11-15T06:13:20Z') → same as new Date(...).getTime()
- Always use ISO 8601 format with explicit timezone for predictable parsing
Häufige Fallstricke
Das sind die häufigsten Fehler von JavaScript-Entwicklern mit Daten und Timestamps:
- new Date(1700000000) — ohne × 1000 ergibt 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 nullbasiert)
- 86400000 ms zu addieren, um „morgen“ zu erhalten, kann an DST-Grenzen scheitern — nutze stattdessen setDate(d.getDate() + 1)
FAQ zu Unix-Timestamps in JavaScript
- Wie erhalte ich in JavaScript einen Unix-Timestamp in Sekunden?
- Nutze Math.floor(Date.now() / 1000). Date.now() liefert Millisekunden — teile durch 1000 und runde ab, um ganze Unix-Sekunden zu erhalten.
- 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?
- Nutze Intl.DateTimeFormat mit expliziter timeZone-Option, etwa new Intl.DateTimeFormat('en-US', { timeZone: 'America/New_York' }). Sie wendet die Sommerzeit automatisch an und braucht keine externe Bibliothek.