13 poin oleh GN⁺ 2026-03-12 | 7 komentar | Bagikan ke WhatsApp
  • Standar baru Temporal API, yang secara mendasar menggantikan keterbatasan objek Date di JavaScript, telah mencapai ECMAScript Stage 4 setelah 9 tahun pengembangan
  • Temporal menyediakan tipe immutable, dukungan zona waktu dan kalender yang eksplisit, serta presisi tingkat nanodetik, sehingga menghilangkan ambiguitas dan kesalahan pada Date lama
  • Berbagai organisasi seperti Bloomberg, Igalia, Microsoft, Google, Mozilla berkolaborasi dalam perancangan spesifikasi dan implementasi, serta mewujudkan kolaborasi multi-engine melalui library bersama berbasis Rust temporal_rs
  • Temporal mendukung operasi waktu dan penanganan kalender internasional secara akurat melalui tipe yang lebih terperinci seperti ZonedDateTime, Instant, PlainDate/Time, Duration
  • Standar ini, yang menyelesaikan masalah selama 30 tahun, dinilai sebagai contoh sukses kolaborasi dan inovasi terbuka dalam ekosistem JavaScript

Masalah penanganan waktu di JavaScript dan kemunculan Temporal

  • Objek Date lama merupakan port langsung dari Date milik Java pada 1995, dan selama puluhan tahun menjadi sumber bug karena sifat mutable, perhitungan bulan yang tidak konsisten, serta parsing yang ambigu
    • Contoh: kesalahan perhitungan akhir bulan saat memakai setMonth, serta hasil parsing string mirip ISO yang berbeda antar-browser
  • Sejak 2010-an, ketika aplikasi web makin kompleks, keterbatasan Date menjadi semakin terasa
  • Para pengembang menutupi masalah ini dengan library eksternal seperti Moment.js, tetapi hal itu menambah ukuran bundle dan beban pemeliharaan
  • Pada 2017, Maggie Johnson-Pint mengajukan proposal Temporal ke TC39, menandai dimulainya pembahasan standardisasi

Kolaborasi TC39 dan industri

  • Temporal dimulai dari Stage 1 pada 2018 dan mencapai Stage 4 (standarisasi) setelah perjalanan 9 tahun
  • Bloomberg terlibat aktif untuk menyelesaikan masalah zona waktu dan presisi di lingkungan JavaScript skala besar
    • Kebutuhan: zona waktu kustom, akurasi zona waktu historis berbasis IANA, dan presisi tingkat nanodetik
  • Bersama Igalia, Microsoft, Google, Mozilla dan lainnya, mereka mengerjakan desain spesifikasi serta implementasi
  • Banyak engineer seperti Philipp Dunkel, Ujjwal Sharma, Philip Chimento, Shane Carr, Justin Grant ikut berperan sebagai champion

Tipe dan fitur utama Temporal

  • Temporal.ZonedDateTime: representasi waktu immutable dengan zona waktu, kalender, dan koreksi DST yang eksplisit
    • Contoh: saat transisi DST di London, jika 01:30 tidak ada, nilainya otomatis dikoreksi menjadi 02:30
  • Temporal.Instant: representasi titik waktu absolut tanpa zona waktu atau kalender, dengan dukungan presisi tingkat nanodetik
    • Titik waktu yang sama dapat dikonversi ke berbagai zona waktu
  • PlainDate / PlainTime / PlainDateTime / PlainYearMonth / PlainMonthDay: tipe "jam dinding" tanpa zona waktu
    • Cocok untuk tampilan atau perhitungan tanggal dan waktu sederhana
  • Temporal.Duration: representasi interval waktu, dengan konversi lintas satuan yang fleksibel (total({ unit: "second" }))
  • Dukungan kalender: dapat menangani operasi kalender non-Gregorian seperti kalender Ibrani secara akurat

Proses implementasi dan standardisasi

  • Temporal merupakan penambahan spesifikasi terbesar dalam sejarah ECMAScript, dengan sekitar 4.500 test case
  • Implementasi bersama berbasis Rust temporal_rs dikembangkan sehingga V8, Boa, dan engine lain dapat memakainya bersama
    • Keuntungan: menurunkan hambatan masuk, memudahkan pemeliharaan jangka panjang, dan meningkatkan kualitas kode
  • Sepanjang 2024~2025, temporal_rs berhasil lulus 100% pengujian dan dinilai sebagai contoh sukses kolaborasi multi-engine

Status dukungan dan tantangan berikutnya

  • Temporal sudah didukung di Firefox 139, Chrome/Edge 144, TypeScript 6.0 Beta
    • Safari masih pada tahap technology preview, dan Node.js 26 dijadwalkan menyusul
  • Tantangan berikutnya adalah integrasi dengan Web API
    • Contoh: dukungan tipe Temporal pada elemen form seperti <input type="date">
    • Juga sedang dipertimbangkan sebagai pengganti DOMHighResTimeStamp (dengan contoh penggunaan Temporal.Now.instant())

Hasil kolaborasi dan inovasi terbuka

  • Temporal adalah standar yang diselesaikan melalui kolaborasi multi-organisasi selama 9 tahun, dengan partisipasi dari
    • Microsoft, Google, Mozilla, Bloomberg, Igalia, Boa dan banyak pihak lain
  • temporal_rs menjadi contoh sukses model infrastruktur bersama, dengan
    • pembuktian pengurangan biaya implementasi ganda, peningkatan konsistensi, dan percepatan inovasi
  • Temporal dinilai bukan sekadar perbaikan API, tetapi juga bukti kolaborasi komunitas JavaScript dalam menyelesaikan utang teknis jangka panjang
  • Setelah 30 tahun, JavaScript akhirnya memiliki API tanggal dan waktu modern

7 komentar

 
jeeeyul 2026-03-12

Kompleksitas perhitungan waktu jauh lebih banyak berasal dari filsafat manusia, presisi astronomi, dan budaya, daripada sekadar masalah format. Perhitungannya sendiri mudah bahkan hanya dengan long. Secara historis, ada banyak bagian aneh dalam garis waktu di mana 1 + 1 tidak sama dengan 2, dan ini banyak berasal dari sistem kalender seperti I Ching yang berubah tergantung posisi, seperti sudut matahari dan permukaan bumi. Dalam kasus seperti ini, kalender matahari-bulan Korea bahkan tidak pernah sekali pun dibahas.

Dan itu ditentukan oleh Korea Astronomy and Space Science Institute.

 
tsboard 2026-03-12

Akhirnya! Menyenangkan!!

 
shakespeares 2026-03-12

Akhirnya!!

 
roxie 2026-03-12

ZonedDateTime...? Jangan-jangan kamu..!

 
sea715 2026-03-12

Akhirnya

 
click 2026-03-12

time.h di C -> java.util.Date di Java -> Date di JS

joda-time di Java -> JSR 310 -> java.time
-> moment.js -> Temporal di JS

Jadi memang alurnya seperti ini.

 
GN⁺ 2026-03-12
Komentar Hacker News
  • Saya sangat suka bahwa Temporal memaksa kita menangani kompleksitas pengelolaan waktu dengan benar
    Berkat pemisahan antara instant dan datetime berbasis kalender, banyak kesalahan umum pada Date hampir bisa dihindari
    Memang agak bertele-tele, tapi jauh lebih baik daripada dipanggil jam 3 pagi untuk memperbaiki bug DST
    • Secara teknis, sepertinya kecil kemungkinan harus memperbaiki bug DST jam 3 pagi selain pada hari Minggu
  • Saya juga hampir menderita selama 10 tahun karena masalah parsing tanggal ISO8601 di Python
    Isu yang dimulai pada 2012 akhirnya masuk ke pustaka standar sebagai solusi
    Diskusi terkait bisa dilihat di thread Google Groups ini
    • Terima kasih banyak. Mem-parsing tanggal dengan cara selain fromisoformat sekarang terasa sangat tidak intuitif
      Dulu saya memakai ciso8601, tetapi sejak masuk standar, semuanya jadi jauh lebih sederhana dan stabil
  • Sangat mengesankan bahwa Firefox bisa mengimplementasikan Temporal saat masih di tahap spesifikasi berkat André Bargull (Anba),
    terutama karena ternyata ia mengimplementasikan semuanya sendirian sebagai relawan
  • Temporal adalah kemajuan besar, tetapi saya tetap tidak suka API-nya
    Saya berbagi kode antara klien dan server, jadi saya berusaha memisahkan data dan logika secara ketat
    Saya ingin semua data tetap berupa JSON murni agar serialisasi/deserialisasi mudah, tetapi objek Temporal kurang nyaman karena berupa instance kelas dengan properti fungsi
    Saya rasa pendekatan seperti date-fns, yaitu menerapkan fungsi murni pada objek yang hanya berisi data, lebih baik
    • Itu memang desain yang disengaja. Tipe Temporal bisa diserialisasi, tetapi tidak dipulihkan otomatis oleh JSON.parse
      Pengembang harus merekonstruksi objek yang benar sendiri dari string ISO
      Jika diotomatisasi, ada risiko menangani tipe yang salah
      Contoh reviver Temporal.Instant di dokumentasi mungkin berguna
    • Saya juga sering mengalami masalah yang sama. Hilangnya prototipe lewat JSON.parse/stringify adalah isu yang umum
      Tetapi saya rasa pilihan tim Temporal benar. Untuk logika tanggal dan waktu, keamanan tipe lebih penting daripada pendekatan data+fungsi sederhana
      Dengan mengikat operasi ke objek, kita bisa mencegah PlainDate diperlakukan sebagai ZonedDateTime secara tidak sengaja
      Di tempat seperti tRPC, cukup tambahkan lapisan tipis yang mengubah lewat Temporal.from() dan toString() di boundary
      Memang sedikit merepotkan, tetapi tetap lebih baik daripada mengorbankan keamanan tipe
    • Sebenarnya instance Date di JavaScript juga punya masalah yang sama
      Date.toJSON memang ada, tetapi saat parsing JSON kita tetap harus mengubah string kembali menjadi Date
      Temporal juga demikian, dan date-fns pada akhirnya juga menangani instance Date native
    • Semua objek Temporal bisa dengan mudah diserialisasi/deserialisasi lewat .toString() dan Temporal.from()
    • Mengubah JSON.parse agar otomatis membuat objek Temporal menurut saya pendekatan yang berlebihan
      Sama seperti Date,
      serialize: instant.toJSON()
      deserialize: Temporal.Instant.from(jsonDate)
      
      yang benar adalah menanganinya secara eksplisit seperti ini
  • Senang sekali Temporal akhirnya disetujui
    Selamat kepada semua champion yang telah bekerja keras selama ini
    Saya menikmati mengerjakan temporal_rs dalam beberapa tahun terakhir
  • Akan menarik kalau perjalanan perbaikan API waktu di Java (Joda-Time → JSR 310 → Java 8) juga dibahas
    Karena proposal radikal JavaScript muncul pada 2018, saya penasaran apakah pendekatan Java ikut memberi pengaruh
    • Ya, lebih tepat melihatnya sebagai Joda memengaruhi Moment.js, lalu itu kembali tercermin dalam diskusi TC39
      TC39 memang merujuk preseden dari bahasa lain, tetapi mencapai konsensus ke arah yang dioptimalkan untuk JavaScript
      Menurut saya API ini adalah implementasi paling matang yang dirancang oleh para ahli JS selama 9 tahun
    • Benar, JavaScript juga mewarisi versi buruk dari Date dari Java
      Detail terkait juga bisa dilihat di thread HN ini
  • Kalimat “pada era Mocha, Ken Smith mem-port kode Date milik Java ke C” terdengar lucu
    karena util.Date milik Java sendiri pada dasarnya hampir merupakan port dari API time.h milik C
  • Saya tertawa melihat Safari hanya mendukung Temporal sebagian
    Sekarang rasanya Safari menjadi penerus spiritual IE
    • Safari memang lambat mengadopsi fitur baru, tetapi tetap mengimplementasikannya secara konsisten
      Masalah IE bukan lambat, melainkan berhenti saat berada di posisi dominan
      Sekarang Chrome-lah yang berada di singgasana imperium, dan justru Safari serta Firefox makin dibutuhkan
      Meningkatnya situs yang hanya mendukung Chrome adalah masalah yang sebenarnya
    • Bahkan pada 2026 pun sepertinya mobile Safari masih belum akan punya pemilih tanggal native
  • Saya berharap Temporal punya tipe interval
    const D = new Temporal()
    const t = new Interval({minutes:5})
    const v = D.add(t)
    
    • Itu adalah Duration
      const D = Temporal.PlainDate.from("2020-06-16");
      const t = Temporal.Duration.from({ day: 1 });
      const v = D.add(t) // 2020-06-17
      
      Lihat dokumentasi MDN
    • Benar, itu memang disebut Duration
  • Terima kasih kepada tim yang telah melakukan perjalanan waktu selama 9 tahun dalam kecepatan 1x demi ini