Travailler avec les timestamps Unix en JavaScript
Tout ce dont vous avez besoin pour travailler avec les timestamps Unix en JavaScript — obtenir l'heure actuelle, créer des Dates à partir de timestamps, formater pour n'importe quel fuseau et éviter les erreurs courantes.
Obtenir le timestamp Unix actuel
JavaScript offre plusieurs façons équivalentes d'obtenir l'heure actuelle sous forme de timestamp numérique. Toutes renvoient le nombre de millisecondes depuis l'epoch Unix.
- 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()
Créer un objet Date à partir d'un timestamp Unix
Le constructeur Date accepte des millisecondes depuis l'epoch. Multipliez toujours par 1000 un timestamp en secondes avant de le passer au constructeur.
- 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
Formater les dates — méthodes de chaîne intégrées
L'objet Date possède plusieurs méthodes intégrées de conversion en chaîne. Chacune produit un format différent.
- .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
Formatage avec fuseau via Intl.DateTimeFormat
Pour un formatage de date cohérent et tenant compte du fuseau sans bibliothèque externe, utilisez l'API Intl.DateTimeFormat. Elle est disponible dans tous les navigateurs modernes et Node.js 13+.
- 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
Reconvertir une chaîne de date en timestamp Unix
Pour aller en sens inverse — d'une chaîne de date vers un timestamp Unix — utilisez Date.parse() ou passez la chaîne au constructeur Date.
- 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
Pièges fréquents
Voici les erreurs les plus fréquentes des développeurs JavaScript avec les dates et les timestamps :
- new Date(1700000000) — sans × 1000, se convertit en l'an ~1970 au lieu de 2023
- getMonth() renvoie 0–11, pas 1–12 — ajoutez toujours 1 à l'affichage
- new Date('2024-01-01') est minuit UTC ; new Date('2024/01/01') est minuit local
- new Date(2024, 0, 1) = 1er janvier (le mois commence aussi à 0 dans le constructeur)
- Ajouter 86400000 ms pour obtenir « demain » peut échouer aux changements d'heure d'été — utilisez plutôt setDate(d.getDate() + 1)
FAQ sur les timestamps Unix en JavaScript
- Comment obtenir un timestamp Unix en secondes en JavaScript ?
- Utilisez Math.floor(Date.now() / 1000). Date.now() renvoie des millisecondes : divisez par 1000 et arrondissez vers le bas pour obtenir des secondes Unix entières.
- Pourquoi new Date() avec un timestamp Unix affiche-t-il 1970 ?
- Le constructeur Date attend des millisecondes. Un timestamp en secondes à 10 chiffres doit être multiplié par 1000 : new Date(seconds * 1000).
- Comment formater une date JavaScript pour un fuseau précis ?
- Utilisez Intl.DateTimeFormat avec une option timeZone explicite, comme new Intl.DateTimeFormat('en-US', { timeZone: 'America/New_York' }). Elle applique l'heure d'été automatiquement et ne nécessite aucune bibliothèque externe.