Waktu Unix dalam satu paragraf
Waktu Unix menghitung detik yang berlalu sejak 00:00:00 UTC pada 1 Januari 1970, momen yang dikenal sebagai epoch. Ia sama sekali mengabaikan zona waktu dan daylight saving: pada saat yang sama, waktu Unix adalah angka yang sama di mana pun di Bumi. Itu menjadikannya format alami untuk menyimpan dan membandingkan momen di database, file log, klaim JWT exp dan iat, waktu modifikasi file, respons API, dan penjadwal mirip cron. Masalahnya, 1700000000 tidak berarti apa-apa bagi manusia, dan untuk itulah konverter ini ada. Sebagai catatan, angka itu adalah 14 November 2023, 22:13:20 UTC.
Detik, milidetik, dan angka yang lebih panjang
Sistem yang berbeda menghitung dengan satuan yang berbeda:
- Detik, 10 digit untuk tanggal saat ini: alat Unix dan Linux, PHP
time(), Pythontime.time()(dengan bagian pecahan), sebagian besar database SQL, JWT. - Milidetik, 13 digit: JavaScript
Date.now(), JavaSystem.currentTimeMillis(), banyak API JSON dan event analitik. - Mikrodetik, 16 digit, dan nanodetik, 19 digit: sebagian database, Go, alat tracing beresolusi tinggi.
Alat ini menentukan satuan berdasarkan besarnya angka. Bilangan bulat apa pun dengan nilai absolut di bawah 100.000.000.000 dibaca sebagai detik, hingga 100.000.000.000.000 (14 digit) sebagai milidetik, di bawah 10^17 sebagai mikrodetik, dan yang lebih besar sebagai nanodetik. Ambang batas ini berlaku untuk setiap kasus realistis: sebagai detik, ambang pertama berarti tahun 5138, sebagai milidetik berarti awal Maret 1973.
Nilai mikrodetik dan nanodetik dipotong ke presisi milidetik, karena hanya itu yang ditampilkan hasilnya. Input pecahan seperti 1700000000.5 tidak diterima, jadi buang dulu bagian desimalnya.
Angka negatif bisa dipakai dan menghasilkan tanggal sebelum 1970: -86400 adalah 31 Desember 1969.
Membaca keenam hasil
- Unix, detik dan Unix, milidetik: momen yang sama dalam kedua satuan. Milidetik dipertahankan saat Anda menempelkan string tanggal dengan bagian waktu seperti
.250; nilai detiknya dibulatkan ke bawah. - ISO 8601: misalnya
2023-11-14T22:13:20.000Z. Selalu dalam UTC, ditandai denganZ, dengan presisi milidetik. Ini format paling aman untuk API dan JSON, karena terurut dengan benar sebagai teks dan bisa diurai oleh semua bahasa pemrograman. - UTC: gaya tanggal HTTP,
Tue, 14 Nov 2023 22:13:20 GMT, yang dipakai di headerExpires,Last-Modified, dan cookie. - Zona waktu Anda: hari/bulan/tahun dengan format 24 jam, diikuti singkatan zona waktu (atau offset GMT jika tidak ada singkatan) dan nama zona yang dilaporkan browser, seperti
Europe/Berlin. Daylight saving diterapkan sesuai tanggal tersebut, bukan offset hari ini. - Relatif: kata-kata seperti "kemarin", "dalam 3 hari", atau "2 tahun lalu". Sengaja dibuat perkiraan: bulan dirata-ratakan sekitar 30,4 hari, dan nilainya diperbarui selama halaman terbuka.
Mengubah tanggal menjadi timestamp
Anda bisa menempelkan tanggal alih-alih angka. String ISO 8601 adalah input paling andal, dan aturan zona waktunya perlu diketahui karena menjadi penyebab sebagian besar kesalahan selisih jam:
2024-05-01T12:00:00Zdan2024-05-01T12:00:00+02:00membawa offset sendiri dan tidak ambigu.2024-05-01tanpa waktu dianggap tengah malam UTC.2024-05-01T12:00dan2024-05-01 12:00, tanggal dengan waktu tetapi tanpa offset, dianggap sebagai waktu lokal Anda.
Jadi jika Anda berada di Berlin pada musim panas, 2024-05-01 dan 2024-05-01 00:00 berselisih dua jam. Saat mengonversi untuk server atau API, tambahkan Z atau offset eksplisit agar tidak ada tebak-tebakan.
Format lain, seperti May 1, 2024 12:00, bergantung pada parser tanggal browser dan bisa berperilaku berbeda antara Chrome, Firefox, dan Safari. Format dengan hari di depan, seperti 01/05/2024, dibaca dengan bulan di depan ala Amerika atau ditolak, jadi hindari format ini.
Jebakan yang perlu diketahui
- Detik kabisat. Waktu Unix menganggap setiap hari tepat 86.400 detik. Ke-27 detik kabisat yang ditambahkan sejak 1972 tidak dihitung, yang hanya berpengaruh untuk pengukuran waktu ilmiah yang presisi.
- Masalah tahun 2038. Sistem yang menyimpan waktu Unix sebagai integer 32-bit bertanda akan overflow di
2147483647, yaitu 19 Januari 2038, 03:14:07 UTC. Tempel angka itu untuk melihatnya. Sistem 64-bit modern tidak terpengaruh, tetapi perangkat embedded lama dan format file lama bisa terdampak. - Selisih jam. Jika JWT ditolak sebagai "belum berlaku" atau "kedaluwarsa", bandingkan
iatdanexp-nya dengan Waktu Unix saat ini yang berjalan di bagian atas halaman. Selisih beberapa menit menandakan jam yang salah, bukan token yang buruk.
Untuk membaca klaim token, dekode bagian tengahnya dengan Encoder dan decoder Base64 lalu rapikan JSON-nya di Format dan validasi JSON. Konversi berjalan di browser Anda memakai jam dan pengaturan zona waktunya sendiri.