Werken met Unix-tijdstempels in programmeertalen
Waarom Unix-tijdstempels in programmeren?
Unix-tijdstempels zijn het universele ruilmiddel van tijd in software. Ze maken datumrekenkunde triviaal (tel gewoon seconden op of trek ze af), elimineren tijdzoneverwarring en serialiseren netjes naar JSON. Elke programmeertaal biedt eenvoudige functies om ermee te werken, maar de API's verschillen subtiel. Deze gids behandelt de meest voorkomende talen en hun beste praktijken.
JavaScript (Browser en Node.js)
JavaScript gebruikt milliseconden voor zijn Date-object, terwijl de meeste andere systemen seconden gebruiken. Dit is de meest voorkomende bron van bugs.
Het huidige tijdstempel verkrijgen
// Milliseconds since epoch (standard JavaScript)
const nowMs = Date.now(); // 1785292800000
// Seconds since epoch (for compatibility)
const nowSec = Math.floor(Date.now() / 1000); // 1785292800
// Node.js high-resolution timer (microseconds)
const hrTime = process.hrtime.bigint();
Een tijdstempel converteren naar een datum
// From seconds (most APIs and databases)
const timestamp = 1785292800;
const date = new Date(timestamp * 1000); // Multiply by 1000!
// From milliseconds (JavaScript native)
const dateFromMs = new Date(1785292800000);
// Format the result
console.log(date.toISOString());
// Output: 2026-07-19T00:00:00.000Z
console.log(date.toLocaleString("en-US", { timeZone: "America/New_York" }));
// Output: 7/18/2026, 8:00:00 PM
Een datumstring parseren naar een tijdstempel
// Using Date.parse() (returns milliseconds)
const ms = Date.parse("2026-07-19T00:00:00Z");
const sec = ms / 1000; // 1785292800
// Using Date constructor
const ts = Math.floor(new Date("2026-07-19 UTC").getTime() / 1000);
Waarschuwing: het gedrag van Date.parse() varieert tussen browsers voor niet-standaard datumstrings. Het gebruik van ISO 8601-formaat met een tijdzoneaanduiding (Z voor UTC) is het veiligst.
Werken met tijdzones in JavaScript
// Format in a specific timezone
const date = new Date(1785292800 * 1000);
const options = {
timeZone: "Asia/Tokyo",
year: "numeric", month: "2-digit", day: "2-digit",
hour: "2-digit", minute: "2-digit", second: "2-digit",
};
console.log(date.toLocaleString("ja-JP", options));
// Output: 07/19/2026 09:00:00
Voor geavanceerde tijdzonebewerkingen worden de Intl.DateTimeFormat-API of bibliotheken zoals date-fns-tz en Luxon aanbevolen.
Python
Python biedt zowel low-level- (time) als high-level-modules (datetime) voor het werken met tijdstempels.
Het huidige tijdstempel verkrijgen
import time
# Seconds as a float (including fractional milliseconds)
current = time.time()
# Example: 1785292800.123456
# As an integer
current_int = int(time.time())
Een tijdstempel converteren naar een datetime
from datetime import datetime
# UTC datetime (Python 3.x)
dt_utc = datetime.utcfromtimestamp(1785292800)
# Timezone-aware datetime (Python 3.9+ with zoneinfo)
from zoneinfo import ZoneInfo
dt_tokyo = datetime.fromtimestamp(1785292800, tz=ZoneInfo("Asia/Tokyo"))
# Formatted string
print(dt_utc.strftime("%Y-%m-%d %H:%M:%S"))
# Output: 2026-07-19 00:00:00
Een datumstring parseren naar een tijdstempel
import time
from datetime import datetime
# From date string
dt = datetime.strptime("2026-07-19 00:00:00", "%Y-%m-%d %H:%M:%S")
timestamp = time.mktime(dt.timetuple()) # Treats as local time
# For UTC input
from datetime import timezone
timestamp_utc = dt.replace(tzinfo=timezone.utc).timestamp()
Werken met Pandas (gegevensanalyse)
import pandas as pd
# Convert a column of Unix timestamps to datetime
df["timestamp"] = pd.to_datetime(df["unix_seconds"], unit="s")
# Convert to different units
df["datetime_ms"] = pd.to_datetime(df["unix_milliseconds"], unit="ms")
# Set a timezone
df["timestamp_ny"] = df["timestamp"].dt.tz_localize("UTC").dt.tz_convert("America/New_York")
PHP
PHP heeft de eenvoudigste API voor tijdstempelbewerkingen.
Het huidige tijdstempel verkrijgen
<?php
$now = time(); // Integer: 1785292800
$nowMicro = microtime(); // String: "0.12345600 1785292800"
$nowFloat = microtime(true); // Float: 1785292800.1235
Een tijdstempel converteren naar een datum
<?php
echo date("Y-m-d H:i:s", 1785292800);
// Output: 2026-07-19 00:00:00
// With timezone
$tz = new DateTimeZone("Europe/London");
$dt = new DateTime("@1785292800");
$dt->setTimezone($tz);
echo $dt->format("Y-m-d H:i:s");
Go
De time-package van Go is goed ontworpen, maar vereist een expliciet begrip van de betrokken typen.
Het huidige tijdstempel verkrijgen
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
sec := now.Unix() // int64 seconds
milli := now.UnixMilli() // int64 milliseconds
nano := now.UnixNano() // int64 nanoseconds
fmt.Printf("Seconds: %d\n", sec)
}
Een tijdstempel converteren naar een datum
t := time.Unix(1785292800, 0)
fmt.Println(t.UTC())
// Output: 2026-07-19 00:00:00 +0000 UTC
// Format as string
fmt.Println(t.Format("2006-01-02 15:04:05"))
// Output: 2026-07-19 00:00:00
// With timezone
loc, _ := time.LoadLocation("America/Chicago")
fmt.Println(t.In(loc))
Rust
use std::time::{SystemTime, UNIX_EPOCH};
// Current timestamp
let now = SystemTime::now()
.duration_since(UNIX_EPOCH)
.expect("Time went backwards");
println!("Seconds: {}", now.as_secs());
// Timestamp to date
let dt = chrono::NaiveDateTime::from_timestamp_opt(1785292800, 0).unwrap();
println!("{}", dt.format("%Y-%m-%d %H:%M:%S"));
Databaseopslag: beste praktijken
Het juiste kolomtype kiezen
| Database | Aanbevolen type | Opmerkingen |
|----------|-----------------|-------|
| PostgreSQL | TIMESTAMP WITH TIME ZONE of BIGINT | Native tijdstempeltype heeft de voorkeur |
| MySQL / MariaDB | INT UNSIGNED (voor datums tot 2106) of BIGINT | Vermijd het type TIMESTAMP (bereik eindigt in 2038) |
| SQLite | INTEGER | SQLite heeft geen native tijdstempeltype |
| MongoDB | Date-object of int64 | BSON Date is intern een 64-bits tijdstempel |
PostgreSQL-voorbeeld
-- Store as native timestamp
CREATE TABLE events (
id SERIAL PRIMARY KEY,
occurred_at TIMESTAMP WITH TIME ZONE NOT NULL,
payload JSONB
);
-- Insert with current time
INSERT INTO events (occurred_at) VALUES (NOW());
-- Query as Unix timestamp
SELECT EXTRACT(EPOCH FROM occurred_at) AS unix_ts FROM events;
MySQL-voorbeeld
-- Using BIGINT for future-proof storage
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
event_time BIGINT NOT NULL,
message TEXT
);
-- Insert current timestamp
INSERT INTO logs (event_time, message) VALUES (UNIX_TIMESTAMP(), 'Server started');
-- Query and convert
SELECT FROM_UNIXTIME(event_time) AS readable_time FROM logs;
Taalvergelijkingstabel
| Taal | Huidig tijdstempel | Tijdstempel naar datum | Datum naar tijdstempel | Resolutie |
|----------|-------------------|-------------------|-------------------|------------|
| JavaScript | Date.now() | new Date(ts * 1000) | Date.parse(str) / 1000 | Milliseconden |
| Python | time.time() | datetime.fromtimestamp(ts) | datetime.strptime(str).timestamp() | Float seconden |
| PHP | time() | date("Y-m-d", ts) | strtotime(str) | Seconden |
| Go | time.Now().Unix() | time.Unix(ts, 0) | time.Parse(layout, str).Unix() | Seconden |
| Rust | SystemTime::now() | NaiveDateTime::from_timestamp_opt() | — | Verschillend |
Welke taal je ook gebruikt, onze Unix-tijdstempelconverter is een betrouwbare metgezel voor snelle controles en debugging.