Unix Timestamp: Apa Itu dan Cara Menggunakannya
Semua yang perlu diketahui developer tentang Unix time — apa itu epoch, masalah Y2K38, mengkonversi timestamp di JavaScript, Python, dan SQL, jebakan milidetik vs detik, penanganan timezone, dan timestamp di JWT serta database.
Buka file log apa pun. Periksa klaim kedaluwarsa token JWT. Cek kolom created_at dalam respons API. Kemungkinan besar, kamu akan menemukan angka seperti 1711065600 atau 1711065600000. Itulah Unix timestamp — sebuah bilangan bulat sederhana yang merepresentasikan suatu titik waktu. Memahami cara kerja Unix time, asal-usulnya, dan cara menangani jebakan umum yang ada di dalamnya akan menyelamatkanmu dari sekelompok bug yang halus, sulit direproduksi, dan kadang memalukan di production.
Kamu bisa mengkonversi Unix timestamp apa pun ke tanggal yang mudah dibaca (dan sebaliknya) menggunakan BrowseryTools Unix Timestamp Converter — gratis, tanpa daftar, semua proses berjalan di browser.
Apa Itu Unix Timestamp?
Unix timestamp adalah jumlah detik yang telah berlalu sejak Unix Epoch: tengah malam pada 1 Januari 1970, Coordinated Universal Time (UTC). Momen ini — 00:00:00 UTC pada 1970-01-01 — dipilih sebagai titik referensi ketika sistem operasi Unix sedang dikembangkan pada awal 1970-an. Ini adalah tanggal yang bulat dan baru-baru ini, yang membuat kalkulasi mudah dilakukan pada perangkat keras era itu.
Keanggunan Unix time adalah bahwa setiap momen dalam waktu direpresentasikan sebagai satu bilangan bulat. Membandingkan dua timestamp hanyalah pengurangan. Memeriksa apakah sesuatu sudah kedaluwarsa hanyalah perbandingan. Menambahkan interval hanyalah penjumlahan. Tidak ada timezone, tidak ada kalkulasi kalender, tidak ada daylight saving time — hanya sebuah angka.
Per 2026, Unix timestamp saat ini kira-kira 1.774.000.000. Setiap detik, angka itu bertambah 1.
Masalah Y2K38
Jika Unix time disimpan sebagai bilangan bulat bertanda 32-bit — yang memang demikian di banyak implementasi awal — nilai maksimumnya adalah 2.147.483.647. Angka itu berhubungan dengan 03:14:07 UTC pada 19 Januari 2038. Setelah momen itu, bilangan bulat 32-bit bertanda akan overflow kembali ke angka negatif besar, dan sistem yang belum diperbarui akan menafsirkan timestamp secara keliru.
Inilah masalah Year 2038 (Y2K38), setara dengan bug Y2K di era Unix. Sistem modern menggunakan bilangan bulat 64-bit untuk timestamp, yang memperpanjang rentang yang dapat direpresentasikan hingga sekitar 292 miliar tahun ke segala arah — secara efektif selamanya untuk tujuan praktis apa pun. Namun embedded system, database lama dengan kolom timestamp 32-bit, dan kode C lama yang menggunakan time_t sebagai tipe 32-bit masih berisiko.
Mendapatkan Timestamp Saat Ini
Berikut cara mendapatkan Unix timestamp saat ini dalam bahasa pemrograman yang paling umum:
// JavaScript — returns milliseconds, divide by 1000 for seconds const nowMs = Date.now(); // e.g. 1711065600000 const nowSec = Math.floor(Date.now() / 1000); // e.g. 1711065600 // Python import time now = int(time.time()) # seconds since epoch # Using datetime module from datetime import datetime, timezone now = int(datetime.now(timezone.utc).timestamp()) // Go import "time" now := time.Now().Unix() // seconds nowNano := time.Now().UnixNano() // nanoseconds -- SQL (PostgreSQL) SELECT EXTRACT(EPOCH FROM NOW())::BIGINT; -- SQL (MySQL) SELECT UNIX_TIMESTAMP();
Mengkonversi Timestamp ke Tanggal yang Mudah Dibaca
// JavaScript — from seconds const ts = 1711065600; const date = new Date(ts * 1000); // multiply by 1000 for ms console.log(date.toISOString()); // "2024-03-22T00:00:00.000Z" console.log(date.toLocaleDateString()); // locale-formatted date // Python import datetime ts = 1711065600 dt = datetime.datetime.fromtimestamp(ts, tz=datetime.timezone.utc) print(dt.isoformat()) # 2024-03-22T00:00:00+00:00 -- PostgreSQL: timestamp from integer SELECT to_timestamp(1711065600); -- Result: 2024-03-22 00:00:00+00 -- MySQL SELECT FROM_UNIXTIME(1711065600); -- Result: 2024-03-22 00:00:00
Bug Timestamp #1: Milidetik vs Detik
Date.now() milik JavaScript mengembalikan milidetik. Standar Unix — dan hampir setiap bahasa, database, dan API lainnya — menggunakan detik. Ketidakcocokan ini adalah sumber bug timestamp yang paling umum.
Gejalanya tidak bisa salah: tanggal muncul sebagai 1970 (timestamp dibagi 1000 secara tidak sengaja, atau diperlakukan sebagai detik padahal sebenarnya milidetik), atau tanggal muncul di tahun 56.000+ (detik diperlakukan sebagai milidetik lalu dibagi lagi). Nilai sekitar 1.700.000.000 hampir pasti merupakan detik. Nilai sekitar 1.700.000.000.000 hampir pasti merupakan milidetik.
// Bug: treating seconds as milliseconds — lands in 1970
new Date(1711065600) // Mon Jan 20 1970 11:24:25 UTC 🚫
// Correct: multiply seconds by 1000
new Date(1711065600 * 1000) // Fri Mar 22 2024 00:00:00 UTC ✓
// Defensive helper — handles both seconds and milliseconds
function toDate(ts) {
// If it's under 10^12, it's seconds; multiply
return new Date(ts < 1e12 ? ts * 1000 : ts);
}Masalah Timezone dengan Timestamp
Unix timestamp selalu dalam UTC — mereka merepresentasikan satu momen absolut dalam waktu, tanpa timezone yang melekat. Pertanyaan timezone hanya muncul di lapisan tampilan, ketika kamu mengkonversi timestamp ke format yang mudah dibaca manusia.
Kesalahan yang paling umum adalah menggunakan metode timezone lokal tanpa menyadarinya.new Date(ts).toLocaleDateString() di JavaScript mengembalikan tanggal dalam timezone lokal browser. Jika servermu menghasilkan timestamp pada pukul 23:00 UTC dan pengguna di UTC+0 serta pengguna di UTC+1 keduanya menampilkannya, mereka akan melihat tanggal kalender yang berbeda. Apakah itu benar tergantung pada kebutuhan produk — tetapi itu harus menjadi pilihan yang disengaja, bukan yang tidak disengaja.
// Always explicit about timezone — use toISOString() for UTC
const date = new Date(1711065600 * 1000);
date.toISOString() // "2024-03-22T00:00:00.000Z" ← always UTC
// Or use Intl.DateTimeFormat for locale/timezone display
new Intl.DateTimeFormat("en-US", {
timeZone: "America/New_York",
dateStyle: "full",
}).format(date); // "Friday, March 22, 2024"Timestamp di Database
Database menawarkan dua opsi utama untuk menyimpan tanggal: tipe kolom TIMESTAMP (yang menyimpan momen absolut dalam waktu) dan tipe kolom DATE atau DATETIME (yang menyimpan representasi kalender tanpa timezone bawaan).
Untuk kolom seperti created_at, updated_at, dan timestamp event, selalu gunakan kolom TIMESTAMP WITH TIME ZONE (atau padanannya di database yang kamu gunakan) daripada bilangan bulat biasa. Ini memungkinkan database menangani konversi dan perbandingan timezone dengan benar, dan membuat query seperti "event dalam 24 jam terakhir" akurat terlepas dari pengaturan timezone server.
Ketika kamu perlu menyimpan Unix timestamp sebagai bilangan bulat mentah (untuk kompatibilitas dengan sistem eksternal atau portabilitas maksimum), dokumentasikan dengan jelas apakah itu detik atau milidetik, dan konsistenlah di seluruh skema.
Timestamp di JWT dan API
JSON Web Token (JWT) menggunakan Unix timestamp (dalam detik) untuk klaim waktu mereka:
iat— issued at: waktu token dibuatexp— expiry: waktu setelah token tidak boleh diterimanbf— not before: token tidak boleh digunakan sebelum waktu ini
Memeriksa kedaluwarsa JWT adalah perbandingan sederhana: exp > Math.floor(Date.now() / 1000). Jika waktu saat ini dalam detik lebih besar dari exp, token telah kedaluwarsa. Selalu validasi exp di sisi server — jangan hanya mengandalkan pemeriksaan kedaluwarsa di sisi klien.
Referensi Cepat: Konversi Timestamp
Untuk konversi cepat dan akurat antara Unix timestamp dan tanggal yang mudah dibaca, gunakan BrowseryTools Unix Timestamp Converter. Tempel timestamp untuk melihat tanggal UTC dan lokal yang sesuai, atau masukkan tanggal untuk mendapatkan timestampnya. Semuanya berjalan di browser — tanpa server, tanpa pelacakan.
Ringkasan
Unix timestamp adalah cara universal dan tidak ambigu untuk merepresentasikan momen dalam waktu. Aturan utamanya: selalu dalam UTC, selalu dalam detik (kecuali jika kamu berada di JavaScript, di mana Date.now() menggunakan milidetik), dan selalu merupakan bilangan bulat positif untuk tanggal apa pun setelah 1970. Tangani perbedaan milidetik/detik secara eksplisit, gunakan UTC untuk penyimpanan dan transmisi, dan konversikan ke waktu lokal hanya di lapisan tampilan.
Try the Tools — 100% Free, No Sign-Up
Everything runs in your browser. No uploads. No accounts. No ads.
Explore All Tools →