2 poin oleh GN⁺ 2025-01-31 | 1 komentar | Bagikan ke WhatsApp
  • 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

 
GN⁺ 2025-01-31
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 seperti chrono di Rust dan Joda Time di Java

    • Waktu itu kompleks, dan Temporal menanganinya dengan membaginya menjadi waktu naif, instan, dan waktu berzona
    • Saat menambahkan satu hari ke sebuah timestamp, perlu ditentukan apakah itu lokal terhadap zona waktu tertentu. Jika tidak, bug bisa muncul saat DST atau perubahan zona waktu terjadi
    • Temporal juga menyelesaikan masalah serialisasi antara timestamp "offset tetap" dan timestamp dalam zona waktu tertentu
  • Zona waktu dapat diubah dengan menggunakan Temporal.ZonedDateTime.prototype.withTimeZone()

    • Konversi zona waktu dan penanganan durasi adalah fitur penting yang seharusnya ditangani pustaka, dan Temporal menangani hal itu
    • Namun, Temporal.Duration tidak menyediakan fungsi format khusus pengguna
  • Proposal Temporal bagus, tetapi disayangkan karena menggunakan kesetaraan referensi saat membandingkan

    • Ini menghilangkan kemampuan untuk memakai objek sebagai kunci Map atau mengumpulkannya di Set
  • Banyak fitur sedang dikembangkan di TC39, dan diharapkan Temporal segera dirilis

    • Diperlukan upaya pengembangan agar browser utama mendukung fitur-fitur baru
  • Ada rasa penasaran tentang bagaimana data zona waktu Temporal diperbarui

    • Jika pengguna tidak memperbarui browser, mereka bisa melihat waktu yang salah
  • Ada usulan untuk menambahkan event saat zona waktu berubah

    • Banyak orang berpindah zona waktu setiap hari
  • 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 diubah

    • Disarankan memakai CarbonImmutable agar selalu mengembalikan instance baru
    • Ada saran untuk mengimpor CarbonImmutable dan Carbon sebagai alias di Laravel
  • Ada berbagai artikel dan diskusi terkait JavaScript Temporal