Wat is een Unix-timestamp (en waarom gebruiken developers het)?
Een Unix-timestamp is één enkel geheel getal: het aantal seconden dat is verstreken sinds 1 januari 1970 om 00:00:00 UTC. Dat moment heet de Unix epoch, en elke seconde sindsdien is zonder onderbreking doorgeteld.
De huidige timestamp nu ligt ergens rond 1.750.000.000. Alleen dat getal vertelt elke computer, database of API precies welk moment je bedoelt — zonder dubbelzinnigheid.
Waarom 1970?
Unix werd eind jaren 60 ontwikkeld bij Bell Labs. Toen engineers een vast referentiepunt voor tijd nodig hadden, kozen ze 1 januari 1970 — het begin van een nieuw decennium, makkelijk om mee te redeneren, en handig “recent” zodat opgeslagen datums destijds in de praktijk geen negatieve getallen nodig hadden.
Het was een pragmatische keuze, geen principiële. Maar het is blijven hangen.
Het probleem dat Unix-timestamps oplossen
Datums als mensleesbare strings opslaan creëert op elk niveau ambiguïteit:
- Verschillen in formaat: is
03/04/254 maart of 3 april? Is het 1925 of 2025? - Tijdzoneverwarring: “vrijdag 15:00” is een ander moment in Londen dan in Tokio
- Localeverschillen: sommige landen schrijven dag-maand-jaar, andere maand-dag-jaar
Een Unix-timestamp omzeilt dit allemaal. 1711929600 is één ondubbelzinnig moment in de tijd, ongeacht waar je bent of welke opmaak je verkiest. Machines zijn het eens; mensen kunnen het omzetten.
Seconden, milliseconden en microseconden
De oorspronkelijke Unix-timestamp is in seconden. Maar verschillende systemen gebruiken verschillende resoluties:
| Formaat | Eenheid | Voorbeeld |
|---|---|---|
| Unix (POSIX) | Seconden | 1711929600 |
JavaScript Date.now() | Milliseconden | 1711929600000 |
Python time.time() | Seconden (float) | 1711929600.123 |
| Database-timestamps | Vaak microseconden | 1711929600000000 |
Dit is een van de meest voorkomende oorzaken van bugs als je systemen koppelt. Een JavaScript-timestamp direct doorgeven aan een Python- of Go-functie is 1.000× te groot. Controleer dus altijd de resolutie wanneer je grenzen tussen systemen oversteekt.
Unix-timestamps lezen en schrijven
In JavaScript / TypeScript
// Current timestamp in seconds
Math.floor(Date.now() / 1000)
// Current timestamp in milliseconds
Date.now()
// Convert timestamp (seconds) to Date object
new Date(timestamp * 1000)
// Convert Date to timestamp (seconds)
Math.floor(new Date('2024-04-01').getTime() / 1000)
In Python
import time, datetime
# Current timestamp (float)
time.time()
# Convert to datetime
datetime.datetime.fromtimestamp(1711929600)
# Convert datetime to timestamp
datetime.datetime(2024, 4, 1).timestamp()
In SQL (PostgreSQL)
-- Current timestamp
EXTRACT(EPOCH FROM NOW())::int
-- Convert to timestamp
TO_TIMESTAMP(1711929600)
Tijdzones beïnvloeden de timestamp zelf niet
Dit is belangrijk en wordt vaak verkeerd begrepen.
Een Unix-timestamp stelt altijd een moment in UTC voor. Wanneer je het weergeeft, zet je het om naar een lokale tijdzone. Wanneer je het opslaat, sla je de UTC-waarde op. De timestamp zelf is tijdzone-neutraal.
Dit betekent:
- Twee gebruikers in verschillende tijdzones die “nu” opslaan krijgen dezelfde timestamp
- Bij het weergeven ziet iedereen het in zijn/haar lokale tijd
- Geen offset-aanpassingen nodig in de database — alleen in de presentatielaag
Het Year 2038-probleem
Unix-timestamps die als een 32-bit signed integer worden opgeslagen kunnen maar tot 2.147.483.647 seconden tellen — dat komt overeen met 19 januari 2038 om 03:14:07 UTC. Daarna “wrapt” een 32-bit teller naar een groot negatief getal.
Systemen die timestamps nog als 32-bit integers opslaan, zullen op die datum stuklopen. De meeste moderne systemen gebruiken 64-bit integers, waardoor de overflow-datum doorschuift naar het jaar 292 miljard — praktisch irrelevant.
Werk je met embedded systemen, legacy databases of oude C-code, dan is het de moeite waard te controleren hoe timestamps worden opgeslagen.
Wanneer gebruik je een Unix-timestamp?
Gebruik een Unix-timestamp wanneer je:
- Datums in een database opslaat en een eenvoudig, sorteermbaar geheel getal wilt
- Datums tussen systemen of API’s doorgeeft
- Events chronologisch vergelijkt of sorteert
- Duraties berekent (gewoon twee timestamps van elkaar aftrekken)
- Met caches of expiry-logica werkt (
expires_at = now + 3600)
Gebruik een geformatteerde datumstring wanneer je:
- Een datum aan een gebruiker toont
- Mensleesbare events logt
- Met spreadsheets of CSV-exports werkt
Snelle conversies
| Wat | Seconden |
|---|---|
| 1 minuut | 60 |
| 1 uur | 3.600 |
| 1 dag | 86.400 |
| 1 week | 604.800 |
| 30 dagen | 2.592.000 |
| 1 jaar (ongeveer) | 31.536.000 |
De Unix Timestamp Converter zet elke timestamp om naar een mensleesbare datum of zet een datum om naar een Unix-timestamp — direct.