-
Rilis JavaScript Temporal dimulai
- Implementasi objek JavaScript Temporal yang baru mulai disertakan dalam rilis eksperimental browser. Ini adalah kabar besar bagi pengembang web, karena penanganan tanggal dan waktu di JavaScript akan menjadi jauh lebih sederhana dan modern.
- Aplikasi yang bergantung pada penjadwalan, internasionalisasi, dan data sensitif waktu dapat menggunakan kemampuan bawaan untuk menangani tanggal, waktu, durasi, dan kalender secara efisien, akurat, dan konsisten.
- Dukungan lintas-browser yang stabil masih cukup jauh, dan implementasinya bisa berubah seiring perkembangannya, tetapi saat ini kita sudah bisa melihat Temporal, memahami alasannya, dan masalah apa yang dipecahkannya.
- Ada lebih dari 270 halaman dokumentasi Temporal yang ditambahkan ke MDN minggu ini, lengkap dengan penjelasan rinci dan contoh.
-
Apa itu JavaScript Temporal?
- Untuk memahami Temporal, kita bisa melihat objek
Date di JavaScript. Saat JavaScript dibuat pada tahun 1995, objek Date disalin dari implementasi awal java.util.Date milik Java yang penuh kekurangan.
- Java mengganti implementasi tersebut pada tahun 1997, tetapi JavaScript terjebak dengan API yang sama selama hampir 30 tahun.
- Masalah utama objek
Date di JavaScript adalah hanya mendukung waktu lokal pengguna dan UTC, tanpa dukungan zona waktu. Selain itu, perilaku parsing-nya sangat tidak dapat diandalkan, dan Date sendiri bersifat mutable sehingga dapat menimbulkan bug yang sulit dilacak.
- Semua masalah ini membuat penanganan tanggal dan waktu di JavaScript menjadi rumit dan rawan bug. Sebagian besar pengembang mengandalkan library seperti Moment.js dan date-fns untuk menangani tanggal dan waktu dengan lebih baik di aplikasi mereka.
- Temporal dirancang untuk sepenuhnya menggantikan objek
Date, sehingga pengelolaan tanggal dan waktu menjadi andal dan dapat diprediksi. Temporal mendukung representasi zona waktu dan kalender, serta menambahkan banyak metode bawaan untuk konversi, perbandingan dan perhitungan, pemformatan, dan lainnya.
-
Konsep inti
- Konsep inti dalam Temporal adalah instant (titik unik dalam sejarah), waktu jam dinding (waktu lokal), dan durasi. API-nya memiliki struktur berikut untuk menangani konsep-konsep ini:
- Durasi:
Temporal.Duration perbedaan antara dua titik waktu
- Titik waktu:
- Titik waktu unik:
- Sebagai timestamp:
Temporal.Instant
- Tanggal-waktu dengan zona waktu:
Temporal.ZonedDateTime
- Tanggal/waktu yang tidak bergantung pada zona waktu ("Plain"):
- Tanggal dan waktu lengkap:
Temporal.PlainDateTime
- Hanya tanggal:
Temporal.PlainDate
- Tahun dan bulan:
Temporal.PlainYearMonth
- Bulan dan hari:
Temporal.PlainMonthDay
- Hanya waktu:
Temporal.PlainTime
- Saat ini: gunakan
Temporal.now untuk mendapatkan waktu saat ini sebagai instance dari berbagai kelas atau dalam format tertentu
-
Contoh Temporal
- Beberapa penggunaan paling dasar Temporal adalah mendapatkan tanggal dan waktu saat ini dalam string ISO. Kini banyak metode dapat menerima zona waktu, sehingga tidak perlu lagi melakukan perhitungan rumit sendiri.
- Bekerja dengan berbagai kalender juga menjadi lebih sederhana, sehingga kita dapat membuat tanggal dalam sistem kalender selain Gregorian (misalnya Ibrani, Tiongkok, Islam).
- Bekerja dengan Unix timestamp adalah kasus penggunaan yang sangat umum, karena banyak sistem (API, database) menggunakan format ini untuk merepresentasikan waktu.
- Metode
compare() memungkinkan pengurutan durasi secara elegan dan efisien.
-
Mencoba Temporal dan dukungan browser
- Dukungan mulai perlahan masuk ke rilis browser eksperimental, dan Firefox saat ini memiliki implementasi yang paling matang.
- Di Firefox, Temporal sedang dibangun ke dalam versi Nightly di balik preferensi
javascript.options.experimental.temporal.
- Dengan mulai diperkenalkannya implementasi eksperimental, ini adalah saat yang tepat untuk mencoba Temporal dan membiasakan diri dengan pendekatan modern dalam menangani tanggal dan waktu di JavaScript.
-
Ucapan terima kasih
- Terima kasih kepada Eric Meyer atas pekerjaannya pada topik ini. Sudah sekitar 4 tahun sejak Eric mendokumentasikan data kompatibilitas browser dan menyusun dokumentasi di fork mdn/content miliknya.
- Joshua Chen melanjutkan estafet dari Eric dan menyiapkan pull request untuk dokumentasi MDN.
- Terima kasih kepada André Bargull atas pekerjaannya pada implementasi Temporal di Firefox.
1 komentar
Opini Hacker News
Temporal berguna untuk mengatasi masalah pada API
Date()yang lama. API ini menawarkan antarmuka yang nyaman, terinspirasi dari pustaka waktu berkualitas tinggi sepertichronodi Rust dan Joda Time di JavaZona waktu dapat diubah dengan menggunakan
Temporal.ZonedDateTime.prototype.withTimeZone()Temporal.Durationtidak menyediakan fungsiformatkhusus penggunaProposal Temporal bagus, tetapi disayangkan karena menggunakan kesetaraan referensi saat membandingkan
Banyak fitur sedang dikembangkan di TC39, dan diharapkan Temporal segera dirilis
Ada rasa penasaran tentang bagaimana data zona waktu Temporal diperbarui
Ada usulan untuk menambahkan event saat zona waktu berubah
Nama Temporal dipakai untuk menghindari benturan dengan objek waktu yang umum, tetapi pada awalnya bisa disalahpahami sebagai kontrol garbage collection
Kelas Carbon di PHP, yang mewarisi
DateTime, menjelaskan masalah dalam menangani timestamp yang dapat diubahCarbonImmutableagar selalu mengembalikan instance baruCarbonImmutabledan Carbon sebagai alias di LaravelAda berbagai artikel dan diskusi terkait JavaScript Temporal