Alat pembangun · Penukar cap masa Unix
Cara pelayar menukar zaman kepada waktu tempatan dengan Tarikh dan Antarabangsa
· Bagaimana ia berfungsi
cap masa javascript pelayar-apis
Penukar pelayar tidak mempunyai pangkalan data jam pelayan atau zon waktu sendiri; ia bergantung pada objek Tarikh dan Intl API yang disokong oleh sistem pengendalian anda. Siaran ini menerangkan saluran paip itu dan hadnya.
Dari mana pelayar mendapat 'tempatan'? — zaman yang sama ditunjukkan secara berbeza pada komputer riba dan telefon dalam bilik yang sama
Dua peranti di sebelah satu sama lain boleh menyebabkan satu zaman berbeza apabila zon setempat yang dikonfigurasikan berbeza. Integer tidak berubah antara komputer riba dan telefon; setiap pelayar membina segera yang sama, kemudian membekalkan medan kalendar tempatan untuk persekitarannya sendiri. Oleh itu, "Tempatan" menggambarkan pembaca, bukan harta yang dibawa dalam zaman itu.
ToolAcre menjadikan pergantungan itu kelihatan dengan melabelkan baris setempat dengan `Intl.DateTimeFormat().resolvedOptions().timeZone`. Tangkapan skrin yang menyatakan satu masa dan log pelayan yang menyatakan yang lain mungkin kedua-duanya adalah bacaan yang setia. Bandingkan UTC baris mereka dahulu; output UTC yang sepadan menunjukkan bahawa pembentangan, bukannya segera asas, berbeza.
Tarikh mengambil masa milisaat — kontrak pembina, mengapa saat mesti didarab dengan seribu, dan julat Tarikh boleh mewakili
JavaScript `Date` menerima milisaat dari zaman itu. ToolAcre's `fromEpoch` mendarab input saat dengan 1,000 dan meninggalkan input milisaat tidak berubah sebelum membina objek. Penukaran itu jelas kerana menghantar 1,717,243,200 terus kepada `new Date` bermakna kira-kira dua puluh hari selepas 1970, bukan Jun 2024.
Pelaksanaan menolak nombor tidak terhingga dan sebarang nilai yang ditafsirkan melebihi ±8.64×10¹⁵ milisaat sebelum memformat. Had itu datang daripada julat Tarikh yang dinamakan dalam sumber, bukan daripada pangkalan data atau jam sistem pengendalian. Menukar pemilih boleh mengalihkan nilai merentasi sempadan, jadi ralat juga memberitahu anda unit yang digunakan.
UTC pengakses berbanding pengakses tempatan — getUTCHours dan getHours, dan cara enjin menggunakan offset
ToolAcre tidak mengekstrak medan dengan `getUTCHours` dan `getHours`; kata pengakses rangka adalah lebih khusus daripada pelaksanaan. Ia meminta `Intl.DateTimeFormat` memformatkan Tarikh sekali dengan `timeZone: "UTC"` dan sekali tanpa zon override. Kedua-dua panggilan menerima nilai milisaat yang sama, jadi kedua-dua panggilan tidak boleh mengalihkan acara itu sendiri.
Perbezaan itu penting apabila menyahpepijat. Jika baris saat dan milisaat bersetuju dengan pengeluar tetapi label tempatan mengejutkan anda, periksa zon pelayar daripada menambah jam pada zaman itu. Aritmetik mengimbangi manual akan mencipta segera yang berbeza dan kemudian membenarkan pemformat menggunakan peraturan setempat sekali lagi, menghasilkan ralat pelarasan dua kali klasik.
UTC dan pemformatan tempatan meminta enjin untuk dua bacaan bagi satu Tarikh
Penukar boleh membuktikan bahawa ia meminta pelayar untuk `resolvedOptions().timeZone`; ia tidak dapat membuktikan sama ada enjin tertentu memperoleh setiap peraturan zon masa daripada sistem pengendalian, data yang digabungkan atau lapisan platform lain. Sumber itu sengaja menganggap jentera itu sebagai tanggungjawab enjin dan kembali kepada frasa "waktu tempatan" jika pertanyaan zon gagal.
Sempadan bukti ini berguna. Zon bernama dalam hasilnya mengenal pasti pilihan semasa pelayar, tetapi ia bukan laporan versi untuk pangkalan data zon waktu. Jika dua persekitaran tidak bersetuju pada tarikh lama, rekod pelayar, sistem pengendalian dan zon yang dipaparkan. Penukar membekalkan pemerhatian; ia tidak mendiagnosis pakej data di sebalik Intl.
Pelayar melaporkan zon setempat, manakala sumber peraturannya kekal sebagai butiran pelaksanaan
Untuk baris ISO, `toISOString()` membekalkan rentetan UTC dengan Z di belakang dan tiga digit pecahan. Baris UTC dan tempatan yang boleh dibaca manusia menggunakan pemformat Inggeris Great Britain dengan tahun berangka, bulan yang disingkat, hari dua digit dan jam 24-jam. Pemformat juga meminta `shortOffset`, menjadikan bahagian offset yang berkenaan bagi setiap baris yang diberikan.
Pilihan tersebut menerangkan sebab menyalin `Date.toString()` daripada konsol bukanlah bukti yang setara. Prosa tepatnya adalah bergantung kepada setempat dan di luar kontrak keluaran alat ini. ToolAcre membetulkan pilihan paparannya, sementara masih membenarkan zon tempatan sebenar berubah-ubah. Salin nilai ISO apabila sistem lain memerlukan perbandingan yang boleh dibaca mesin yang stabil.
Contoh yang berfungsi: satu zaman, tiga output — rentetan UTC ISO, masa yang diformatkan secara setempat dan pengimbangan dalam beberapa minit dari getTimezoneOffset
Masukkan 1,717,243,200 dan pilih saat. Pendaraban menghasilkan 1,717,243,200,000 milisaat, yang ujian menetapkan sebagai `2024-06-01T12:00:00.000Z`. Format baris UTC yang serta-merta dalam UTC; baris tempatan memformatkan Tarikh yang sama dalam zon pelayar dan menamakan zon itu. Baris saat dan milisaat mengekalkan kedua-dua bentuk berangka.
Jam dan ofset tempatan yang tepat mesti dibaca daripada peranti yang menjalankan contoh; menerbitkan satu di sini akan berpura-pura setiap pembaca mempunyai zon yang sama. Itulah sebabnya semakan berfungsi ini menggunakan penegasan ISO sebagai hasil tetapnya dan menganggap output tempatan sebagai nilai yang diperhatikan. Jika ISO berbeza, lawati semula unit yang dipilih sebelum menyiasat tetapan lokasi.
Contoh yang berjaya: satu zaman, tiga output ToolAcre sebenarnya mendedahkan
Laluan ini tidak menawarkan pemilih untuk zon ketiga sewenang-wenangnya. `formatInZone` boleh menerima zon secara dalaman, tetapi panel memanggilnya untuk UTC dan untuk lalai pelayar sahaja. Artikel yang mendakwa bahawa pengguna boleh memilih Tokyo, Nairobi atau Toronto akan menerangkan antara muka yang tidak dihantar, walaupun Intl boleh menyokong pemformatan sedemikian di tempat lain.
Ia juga tidak mendedahkan pemilihan kalendar, pemilihan tempat atau semakan pangkalan data zon waktu. Untuk penukaran merentas pejabat, kekalkan zaman sebagai sauh dan gunakan alat yang antara muka yang didokumenkan menamakan zon sasaran. Di sini janji yang lebih sempit adalah berharga: universal UTC di sebelah persekitaran setempat, tanpa pelayan tersembunyi yang menentukan maksud setempat.
Bawa pulang: pelayar anda ialah jam dan atlas — dan cara penukar cap masa Unix menggunakannya untuk menunjukkan UTC dan setempat bersebelahan tanpa pelayan
Pelayar bertindak sebagai enjin aritmetik dan persekitaran persembahan. ToolAcre menyelesaikan unit, mencipta satu Tarikh, meminta nilai ISO kanonik, kemudian memformatkan UTC dan bacaan setempat bersebelahan. Tiada perkhidmatan penukaran jauh diperlukan untuk langkah tersebut dan unit yang dipaparkan memastikan keputusan faktor-1,000 tersedia untuk semakan.
Apabila output tidak bersetuju merentas peranti, bandingkan baris ISO, nota unit dan zon setempat yang dinamakan dalam susunan tersebut. Ketiga-tiga pemerhatian tersebut memisahkan segera, skala dan persembahan. Melayan jam tempatan sebagai sumber kebenaran meruntuhkan ketiga-tiga soalan menjadi satu dan menjadikan penukaran yang betul kelihatan salah apabila penonton menukar zon.