Alat pengembang · Konverter stempel waktu Unix
Bagaimana browser mengubah suatu zaman menjadi waktu lokal dengan Tanggal dan Intl
· Cara kerjanya
stempel waktu javascript browser-apis
Konverter browser tidak memiliki jam server atau database zona waktu sendiri; itu bergantung pada objek Tanggal dan Intl API yang didukung oleh sistem operasi Anda. Posting ini menjelaskan pipeline itu dan batasannya.
Dari mana browser mendapatkan 'lokal'? — zaman yang sama ditampilkan secara berbeda pada laptop dan telepon di ruangan yang sama
Dua perangkat yang bersebelahan dapat merender satu periode secara berbeda ketika zona lokal yang dikonfigurasi berbeda. Bilangan bulat tidak berubah antara laptop dan telepon; setiap browser membuat instan yang sama, lalu menyediakan kolom kalender lokal untuk lingkungannya sendiri. Oleh karena itu, “Lokal” menggambarkan pembaca, bukan properti yang dibawa dalam zaman tersebut.
ToolAcre membuat ketergantungan tersebut terlihat dengan memberi label pada baris lokal dengan `Intl.DateTimeFormat().resolvedOptions().timeZone`. Tangkapan layar yang menyatakan waktu satu jam dan log server yang menyatakan waktu lain mungkin merupakan pembacaan yang benar. Bandingkan baris UTC terlebih dahulu; keluaran UTC yang cocok menunjukkan bahwa presentasi, bukan instan yang mendasarinya, berbeda.
Tanggal membutuhkan waktu milidetik — kontrak konstruktor, alasan detik harus dikalikan dengan seribu, dan rentang yang dapat diwakili oleh Tanggal
JavaScript `Date` menerima milidetik dari zaman tersebut. ToolAcre `fromEpoch` mengalikan input detik dengan 1,000 dan membiarkan input milidetik tidak berubah sebelum membuat objek. Konversi tersebut eksplisit karena meneruskan 1,717,243,200 langsung ke `new Date` berarti sekitar dua puluh hari setelah 1970, bukan 2024 bulan Juni.
Implementasinya menolak angka yang tidak terbatas dan nilai apa pun yang diinterpretasikan melebihi ±8.64×10¹⁵ milidetik sebelum pemformatan. Batasan tersebut berasal dari rentang Tanggal yang disebutkan dalam sumbernya, bukan dari database atau jam sistem operasi. Mengubah pemilih dapat memindahkan nilai melintasi batas, sehingga kesalahan juga memberitahu Anda unit mana yang diterapkan.
UTC pengakses versus pengakses lokal — getUTCHours dan getHours, serta cara mesin menerapkan offset
ToolAcre tidak mengekstrak bidang dengan `getUTCHours` dan `getHours`; kata-kata pengakses garis besarnya lebih spesifik daripada implementasinya. Ia meminta `Intl.DateTimeFormat` untuk memformat Tanggal satu kali dengan `timeZone: "UTC"` dan sekali tanpa penggantian zona. Kedua panggilan menerima nilai milidetik yang sama, sehingga tidak ada yang bisa memindahkan peristiwa itu sendiri.
Perbedaan itu penting saat melakukan debug. Jika baris detik dan milidetik sesuai dengan produsen tetapi label lokal mengejutkan Anda, periksa zona browser daripada menambahkan jam ke epoch. Aritmatika offset manual akan menghasilkan instan yang berbeda dan kemudian membiarkan pemformat menerapkan aturan lokal lagi, sehingga menghasilkan kesalahan penyesuaian ganda yang klasik.
UTC dan format lokal meminta mesin untuk dua pembacaan pada satu Tanggal
Konverter dapat membuktikan bahwa ia meminta `resolvedOptions().timeZone` pada browser; ia tidak dapat membuktikan apakah mesin tertentu memperoleh setiap aturan zona waktu dari sistem operasi, data yang dibundel, atau lapisan platform lain. Sumber tersebut dengan sengaja memperlakukan mesin tersebut sebagai tanggung jawab mesin dan kembali ke frasa “waktu setempat” jika kueri zona gagal.
Batasan bukti ini berguna. Zona bernama dalam hasil mengidentifikasi pilihan browser saat ini, namun ini bukan laporan versi untuk database zona waktu. Jika dua lingkungan berbeda pada tanggal yang lama, catat browser, sistem operasi, dan zona yang ditampilkan. Konverter menyediakan observasi; itu tidak mendiagnosis paket data di belakang Intl.
Browser melaporkan zona lokal, sementara sumber aturannya tetap merupakan detail implementasi
Untuk baris ISO, `toISOString()` menyediakan string UTC dengan tambahan Z dan tiga digit pecahan. UTC yang dapat dibaca manusia dan baris lokal menggunakan formatter Inggris Raya dengan tahun numerik, bulan yang disingkat, hari dua digit, dan jam 24 jam. Pemformat juga meminta `shortOffset`, menjadikan bagian offset yang berlaku pada setiap baris yang dirender.
Pilihan tersebut menjelaskan mengapa menyalin `Date.toString()` dari konsol bukanlah bukti yang setara. Prosa sebenarnya bergantung pada lokal dan di luar kontrak keluaran alat ini. ToolAcre memperbaiki opsi tampilannya, namun tetap memungkinkan zona lokal sebenarnya bervariasi. Salin nilai ISO ketika sistem lain memerlukan perbandingan stabil yang dapat dibaca mesin.
Contoh praktis: satu masa, tiga keluaran — string UTC ISO, waktu yang diformat secara lokal dan offset dalam hitungan menit dari getTimezoneOffset
Masukkan 1,717,243,200 dan pilih detik. Perkalian menghasilkan 1,717,243,200,000 milidetik, yang ditetapkan oleh pengujian sebagai `2024-06-01T12:00:00.000Z`. Format baris UTC instan dalam UTC; baris lokal memformat Tanggal yang sama di zona browser dan memberi nama zona tersebut. Baris detik dan milidetik mempertahankan kedua bentuk numerik tersebut.
Jam lokal dan offset yang tepat harus dibaca dari perangkat yang menjalankan contoh; menerbitkannya di sini akan menganggap setiap pembaca memiliki zona yang sama. Itulah sebabnya pemeriksaan yang berhasil ini menggunakan pernyataan ISO sebagai hasil tetapnya dan memperlakukan keluaran lokal sebagai nilai yang diamati. Jika ISO berbeda, kunjungi kembali unit yang dipilih sebelum menyelidiki pengaturan lokasi.
Contoh praktis: satu zaman, tiga keluaran ToolAcre benar-benar diekspos
Rute ini tidak menawarkan pemilih untuk zona ketiga yang sewenang-wenang. `formatInZone` dapat menerima zona secara internal, namun panel memanggilnya untuk UTC dan hanya untuk default browser. Sebuah artikel yang mengklaim bahwa pengguna dapat memilih Tokyo, Nairobi atau Toronto akan menjelaskan antarmuka yang tidak dikirimkan, meskipun Intl dapat mendukung pemformatan seperti itu di tempat lain.
Itu juga tidak memaparkan pemilihan kalender, pemilihan lokal atau revisi basis data zona waktu. Untuk konversi lintas kantor, pertahankan zaman sebagai jangkar dan gunakan alat yang antarmuka terdokumentasinya memberi nama zona target. Di sini janji yang lebih sempit sangat berharga: UTC universal di samping lingkungan lokal, tanpa server tersembunyi yang memutuskan apa arti lokal.
Kesimpulan: browser Anda adalah jam dan atlas — dan bagaimana konverter stempel waktu Unix menggunakannya untuk menampilkan UTC dan lokal secara berdampingan tanpa server
Browser bertindak sebagai mesin aritmatika dan lingkungan presentasi. ToolAcre menyelesaikan unit, membuat satu Tanggal, meminta nilai ISO kanonik, lalu memformat UTC dan pembacaan lokal secara berdampingan. Tidak diperlukan layanan konversi jarak jauh untuk langkah-langkah tersebut, dan unit yang ditampilkan tetap menyediakan keputusan faktor-1,000 untuk ditinjau.
Jika keluaran tidak sama antar perangkat, bandingkan baris ISO, catatan unit, dan zona lokal yang diberi nama dalam urutan tersebut. Ketiga observasi tersebut memisahkan instan, skala, dan presentasi. Memperlakukan jam lokal sebagai sumber kebenaran akan meruntuhkan ketiga pertanyaan menjadi satu dan membuat konversi yang benar terlihat salah setiap kali pemirsa berpindah zona.