C'est quoi un Unix Timestamp et pourquoi tu devrais t'en soucier ?
Ce nombre géant dans ta base de données n'est pas aléatoire. Voici ce qu'il signifie et comment travailler avec.
Tu débogues une réponse API. Il y a un champ appelé created_at avec la valeur 1704067200. C'est quel jour ça ?
C'est un timestamp Unix. C'est le nombre de secondes depuis le 1er janvier 1970. Et une fois que tu le comprends, tu le verras partout.
Pourquoi 1970 ?
Unix était en développement à la fin des années 1960. Les concepteurs avaient besoin d'un point de départ pour les calculs de temps. Le 1er janvier 1970 était assez récent pour être pratique, assez tôt pour couvrir la plupart de l'histoire de l'informatique.
Ce moment—minuit UTC le 1er janvier 1970—s'appelle l'époque Unix.
Pourquoi des secondes au lieu de dates ?
Les dates sont compliquées. Fuseaux horaires, heure d'été, années bissextiles, longueurs de mois variables. "15 mars 2024 à 15h EST" nécessite beaucoup d'analyse.
Un timestamp c'est juste un nombre. 1710522000. Facile à stocker, facile à comparer, facile à calculer.
Tu veux savoir quel événement s'est produit en premier ? Compare deux nombres. Tu veux savoir combien de temps quelque chose a pris ? Soustrais les timestamps. Tu veux ajouter 24 heures ? Ajoute 86400.
L'avantage du fuseau horaire
Voici la partie intelligente : les timestamps sont toujours UTC.
Quand quelqu'un à Tokyo et quelqu'un à New York enregistrent tous deux le même moment, ils obtiennent le même timestamp. L'affichage peut différer—l'un voit 9h, l'autre voit 19h—mais le nombre sous-jacent est identique.
Cela rend les systèmes distribués possibles. Bases de données, APIs, fichiers logs—tous utilisent le même point de référence peu importe où sont les serveurs.
Millisecondes vs Secondes
JavaScript utilise des millisecondes depuis l'époque. La plupart des autres langages utilisent des secondes.
1704067200 (secondes) = 1er janvier 2024, 00:00:00 UTC
1704067200000 (millisecondes) = Même moment
Si un timestamp a l'air bien trop grand, c'est probablement des millisecondes. Divise par 1000.
Lire les timestamps rapidement
Quelques points de référence pour calibrer ton calcul mental :
- 1000000000 (1 milliard) = 9 septembre 2001
- 1600000000 = Septembre 2020
- 1700000000 = Novembre 2023
- 1800000000 = Janvier 2027
Les timestamps actuels sont dans la gamme 1,7 milliard. Si tu vois quelque chose commençant par 17, c'est probablement un timestamp récent.
Opérations courantes
Timestamp actuel :
Math.floor(Date.now() / 1000) // JavaScript
import time; int(time.time()) # Python
Timestamp vers date :
new Date(1704067200 * 1000) // JavaScript a besoin de millisecondes
Date vers timestamp :
Math.floor(new Date('2024-01-01').getTime() / 1000)
Le problème de 2038
Les timestamps Unix étaient à l'origine stockés comme des entiers signés 32 bits. La valeur maximale ? 2 147 483 647.
C'est le 19 janvier 2038, 03:14:07 UTC.
Après ce moment, les systèmes 32 bits déborderont. C'est l'an 2000 pour les timestamps.
La plupart des systèmes modernes utilisent maintenant des entiers 64 bits, qui ne déborderont pas avant des milliards d'années. Mais des systèmes legacy existent. Si tu travailles avec du code ancien, ça vaut le coup de vérifier.
Quand les timestamps deviennent bizarres
Timestamps négatifs. Les dates avant 1970 sont des nombres négatifs. -86400 est le 31 décembre 1969.
Secondes intercalaires. UTC ajoute occasionnellement une seconde pour rester synchronisé avec la rotation de la Terre. La plupart des systèmes ignorent ça. Parfois ça cause le chaos.
Dérive d'horloge. Les horloges des serveurs peuvent ne pas être d'accord. Deux timestamps de différentes machines pourraient ne pas être directement comparables si les horloges n'étaient pas synchronisées.
Les timestamps sont partout une fois que tu commences à chercher. Réponses API, enregistrements de base de données, fichiers logs, cookies. Les comprendre rend le débogage plus rapide et le code lié au temps moins mystérieux.