Laman » Pengekodan » Cara Definitif untuk Format Tarikh untuk Tapak Antarabangsa

    Cara Definitif untuk Format Tarikh untuk Tapak Antarabangsa

    Format tarikh berbeza dengan rantau dan bahasa, jadi selalu berguna jika kita dapat mencari cara untuk memaparkan tarikh kepada pengguna, khusus untuk bahasa dan wilayah mereka.

    Kembali pada Disember 2012, ECMA mengeluarkan spesifikasi API Pengantarabangsaan untuk JavaScript. API Pengantarabangsaan membantu kami memaparkan data tertentu mengikut bahasa dan spesifikasi cutural. Ia boleh digunakan untuk mengenal pasti mata wang, zon masa dan banyak lagi.

    Dalam siaran ini kita akan melihat pemformatan tarikh menggunakan API ini.

    Ketahui lokasi pengguna

    Untuk menunjukkan tarikh mengikut lokasi pilihan pengguna, pertama kita perlu tahu apa yang disukai tempatan. Pada masa ini, cara yang mudah diketahui ialah untuk meminta pengguna; biarkan pengguna memilih tetapan bahasa dan rantau pilihan mereka di halaman web.

    Tetapi, jika itu bukan pilihan anda boleh mentafsirkannya Terima-Bahasa permintaan header atau baca navigator.language(untuk Chrome dan Firefox) atau navigator.browserLanguage(untuk IE) nilai.

    Sila ketahui bahawa tidak semua pilihan tersebut mengembalikan bahasa pilihan pelayar UI.

     var language_tag = window.navigator.browserLanguage || window.navigator.language || "en"; // mengembalikan tag bahasa seperti 'en-GB' 

    Semak API Pengantarabangsaan

    Untuk mengetahui sama ada pelayar menyokong API Pengantarabangsaan atau tidak, kami boleh menyemak kehadiran objek global Intl.

     jika (window.hasOwnProperty)‹("Intl") && typeof Intl === "object") // API Pengantarabangsaan hadir, mari kita gunakan itu 

    The Intl objek

    Intl adalah objek global untuk menggunakan API Pengantarabangsaan. Ia mempunyai tiga sifat yang merupakan konstruktor untuk tiga objek iaitu Collator, NumberFormat, dan DateTimeFormat.

    Objek yang akan kita gunakan ialah DateTimeFormat yang akan membantu kita memformat masa tarikh mengikut bahasa yang berlainan.

    The DateTimeFormat objek

    The DateTimeFormat pembina mengambil dua argumen pilihan;

    • tempatan - rentetan atau pelbagai rentetan yang mewakili tag bahasa, sebagai contoh; “de” untuk bahasa Jerman, “en-GB” untuk bahasa Inggeris yang digunakan di United Kingdom. Sekiranya tag bahasa tidak disebutkan, tempat asal lalai akan menjadi runtime.
    • pilihan - objek yang sifatnya digunakan untuk menyesuaikan pemformat. Ia mempunyai ciri-ciri berikut:
    Harta Penerangan Nilai yang mungkin
    hari Hari bulan “2 digit”, “angka”
    zaman Era tarikh jatuh, Ex: SM “sempit”, “pendek”, “lama”
    formatMatcher Algoritma yang digunakan untuk padanan format “asas”, “patut terbaik”[Lalai]
    jam Merupakan Jam pada masa itu “2 digit”, “angka”
    jam 12 Menunjukkan format 12 jam (benar) atau format 24 jam (salah) benar, salah
    localeMatcher Algoritma yang digunakan untuk pemadanan locale “lookup”, “patut terbaik”[Lalai]
    minit Minit pada masa itu “2 digit”, “angka”
    bulan Bulan dalam setahun “2 digit”, “angka”, “sempit”, “pendek”, “lama”
    kedua Seconds pada masa itu “2 digit”, “angka”
    Zon masa Zon waktu untuk memohon “UTC”, lalai adalah zon waktu runtime
    timeZoneName Zon waktu tarikh “pendek”, “lama”
    hari kerja Hari dalam seminggu “sempit”, “pendek”, “lama”
    tahun Tahun tarikh “2 digit”, “angka”

    Contoh:

     var formatter = new Intl.DateTimeFormat ('en-GB'); / * mengembalikan formatter yang boleh memformat tarikh dalam format tarikh Inggeris Inggeris * / 
     var options = weekday: 'short'; var formatter = new Intl.DateTimeFormat ('en-GB', pilihan); / * mengembalikan formatter yang boleh memformat tarikh dalam format tarikh Bahasa Inggeris Inggeris * bersama dengan hari kerja dalam notasi pendek seperti 'Thu' untuk Khamis * / 

    The format fungsi

    Contohnya DateTimeFormat objek mempunyai penunjuk harta (getter) dipanggil format yang mengembalikan fungsi format yang a Tarikh berdasarkan pada tempatan dan pilihan didapati di DateTimeFormat contohnya.

    Fungsi ini mengambil a Tarikh objek atau undefined sebagai hujah pilihan dan mengembalikan a tali dalam format tarikh yang diminta.

    Catatan: Jika hujah sama ada undefined atau tidak disediakan maka ia mengembalikan nilai Tarikh.now () dalam format tarikh yang diminta.

    Inilah sintaks:

     format Intl.DateTimeFormat (). baru () // akan memulangkan tarikh semasa dalam format tarikh runtime 

    Dan kini mari kita kod pemformatan tarikh ringkas.

    Marilah kita menukar bahasa dan melihat output.

    Sekarang, sudah tiba masanya untuk melihat pilihan.

    The toLocaleDateString kaedah

    Daripada menggunakan formatter seperti yang ditunjukkan dalam contoh di atas, anda juga boleh menggunakan Date.prototype.toLocaleString dengan cara yang sama dengan tempatan dan pilihan hujah, mereka adalah serupa tetapi disyorkan untuk menggunakannya DateTimeFormat objek ketika berurusan dengan terlalu banyak tarikh dalam permohonan anda.

     var mydate = new Date ('2015/04/22'); var options = weekday: "short", year: "numeric", month: "long", day: "numeric"; console.log (mydate.toLocaleDateString ('en-GB', pilihan)); // returns "Wed, 22 April 2015" 

    Uji jika tempatan disokong

    Untuk memeriksa yang disokong tempatan, kita boleh menggunakan kaedah ini disokongLocalesOf daripada DateTimeFormat objek. Ia mengembalikan pelbagai semua kawasan sokongan atau array kosong jika tiada satupun daripada lokal disokong.

    Untuk ujian, marilah kita menambah loceng dummy “blah” dalam senarai tempatan untuk diperiksa.

     console.log (Intl.DateTimeFormat.supportedLocalesOf (["zh", "blah", "fa-pes"])); // mengembalikan Array ["zh", "fa-pes"] 

    Sokongan Penyemak Imbas

    Pada akhir bulan April 2015, pelayar utama menyokong API Pengantarabangsaan.

    Rujukan

    • ECMA Antarabangsa: Spesifikasi API Pengantarabangsaan ECMAScript
    • IANA: Pendaftaran Subtop Bahasa
    • Norbert's Corner: API Internationalization ECMAScript