13 puan yazan GN⁺ 2026-03-12 | 7 yorum | WhatsApp'ta paylaş
  • JavaScript’te Date nesnesinin sınırlamalarını kökten değiştiren yeni standart Temporal API, 9 yıllık geliştirmenin ardından ECMAScript Stage 4 seviyesine ulaştı
  • Temporal, immutable türler, açık zaman dilimi ve takvim desteği, nanosaniye düzeyinde hassasiyet sunarak mevcut Date yapısındaki belirsizlikleri ve hataları ortadan kaldırıyor
  • Bloomberg, Igalia, Microsoft, Google, Mozilla gibi farklı kurumlar spesifikasyon tasarımı ve uygulama için birlikte çalıştı; Rust tabanlı ortak kütüphane temporal_rs ile çoklu motor iş birliği sağlandı
  • Temporal, ZonedDateTime, Instant, PlainDate/Time, Duration gibi ayrıştırılmış türlerle zaman işlemlerini ve uluslararası takvim işlemlerini doğru şekilde destekliyor
  • 30 yıllık sorunları çözen bu standart, JavaScript ekosisteminde iş birliği ve açık inovasyonun başarılı bir örneği olarak değerlendiriliyor

JavaScript’te zaman işleme sorunu ve Temporal’ın ortaya çıkışı

  • Mevcut Date nesnesi, 1995’te Java’daki Date yapısının doğrudan taşınmış haliydi; değiştirilebilirlik, tutarsız ay hesaplamaları, belirsiz ayrıştırma gibi nedenlerle onlarca yıl boyunca hatalara yol açtı
    • Örnek: setMonth kullanıldığında ay sonu hesaplama hataları, ISO benzeri dizgelerin ayrıştırılmasında tarayıcıya göre farklı sonuçlar
  • 2010’lardan sonra web uygulamaları karmaşıklaştıkça Date nesnesinin sınırları daha görünür hale geldi
  • Geliştiriciler bu sorunları Moment.js gibi harici kütüphanelerle telafi etti, ancak bunun sonucunda bundle boyutu artışı ve bakım yükü ortaya çıktı
  • 2017’de Maggie Johnson-Pint, TC39’a Temporal önerisini sunarak standardizasyon sürecini başlattı

TC39 ve sektör iş birliği

  • Temporal, 2018’de Stage 1 aşamasından başlayıp 9 yıl içinde Stage 4 (standartlaşma) seviyesine ulaştı
  • Bloomberg, büyük ölçekli JavaScript ortamlarında zaman dilimi ve hassasiyet sorunlarını çözmek için sürece aktif biçimde katıldı
    • Gereksinimler: kullanıcı tanımlı zaman dilimleri, IANA tabanlı tarihsel zaman dilimi doğruluğu, nanosaniye düzeyinde hassasiyet
  • Igalia, Microsoft, Google, Mozilla ve diğerleriyle birlikte spesifikasyon tasarımı ve uygulama yürütüldü
  • Philipp Dunkel, Ujjwal Sharma, Philip Chimento, Shane Carr, Justin Grant gibi birçok mühendis şampiyon olarak katkı verdi

Temporal’ın temel türleri ve özellikleri

  • Temporal.ZonedDateTime: açık zaman dilimi, takvim ve DST düzeltmesi içeren immutable zaman gösterimi
    • Örnek: Londra’da DST geçişi sırasında 01:30 mevcut değilse otomatik olarak 02:30a düzeltilir
  • Temporal.Instant: zaman dilimi ve takvim içermeyen mutlak zaman noktası; nanosaniye düzeyinde hassasiyet destekler
    • Aynı zaman noktası birden fazla zaman dilimine dönüştürülebilir
  • PlainDate / PlainTime / PlainDateTime / PlainYearMonth / PlainMonthDay: zaman dilimi içermeyen “duvar saati” tipi yapılar
    • Basit tarih-saat gösterimi veya hesaplamaları için uygundur
  • Temporal.Duration: zaman aralığını ifade eder, farklı birimler arasında dönüşüm yapabilir (total({ unit: "second" }))
  • Takvim desteği: İbrani takvimi gibi Gregoryen dışı takvimlerde işlemleri doğru biçimde gerçekleştirir

Uygulama ve standardizasyon süreci

  • Temporal, ECMAScript tarihindeki en büyük spesifikasyon eklemelerinden biri olup yaklaşık 4.500 test vakası içeriyor
  • Rust tabanlı ortak uygulama temporal_rs, V8, Boa ve diğer motorlar tarafından ortaklaşa kullanılmak üzere geliştirildi
    • Avantajlar: giriş engelinin azalması, uzun vadeli bakım kolaylığı, daha yüksek kod kalitesi
  • 2024–2025 döneminde temporal_rs, testlerin %100’ünü geçti ve çoklu motor iş birliğinin başarılı bir örneği olarak öne çıktı

Destek durumu ve sonraki görevler

  • Temporal hâlihazırda Firefox 139, Chrome/Edge 144, TypeScript 6.0 Beta sürümlerinde destekleniyor
    • Safari teknik önizleme aşamasında, Node.js 26 ise planlanıyor
  • Sıradaki önemli konu, web API’leriyle entegrasyon
    • Örnek: <input type="date"> gibi form öğelerinde Temporal türlerinin desteklenmesi
    • DOMHighResTimeStamp yerine kullanım olasılığı değerlendiriliyor (Temporal.Now.instant() örneği verilmiş durumda)

İş birliği ve açık inovasyonun sonucu

  • Temporal, 9 yıllık çok kurumlu iş birliği ile tamamlanan bir standart olarak,
    • Microsoft, Google, Mozilla, Bloomberg, Igalia, Boa gibi çok sayıda paydaşın katkısını içeriyor
  • temporal_rs, paylaşılan altyapı modelinin başarılı bir örneği olarak,
    • yinelenen uygulama maliyetlerini düşürdüğünü, tutarlılığı artırdığını ve inovasyonu hızlandırdığını gösterdi
  • Temporal, yalnızca bir API iyileştirmesi değil; JavaScript topluluğunun uzun vadeli teknik borcu birlikte çözebildiğinin bir kanıtı olarak değerlendiriliyor
  • 30 yıl sonra JavaScript, nihayet modern bir tarih-saat API’sine kavuşmuş oldu

7 yorum

 
jeeeyul 2026-03-12

Zaman hesaplamasının karmaşıklığı, biçim sorunlarından çok, insanlığın felsefesinden, astronominin hassasiyetinden ve kültürden kaynaklanıyor. Hesaplama ise sadece long ile bile kolaydır. Zaman çizelgesinde tarihsel olarak 1 + 1'in 2 etmediği istisnai aralıkların önceden tanımlandığı pek çok yer var; bunun büyük kısmı da güneşle yeryüzünün açısı gibi konuma göre değişen, adeta I Ching'i andıran takvim sistemlerinden geliyor. Böyle durumlarda Kore'nin güneş-ay takvimi ise hiçbir durumda tartışma konusu bile olmadı.

Ve buna Kore Astronomi ve Uzay Bilimleri Enstitüsü karar verir.

 
tsboard 2026-03-12

Nihayet! Ne güzel!!

 
shakespeares 2026-03-12

Nihayet!!

 
roxie 2026-03-12

ZonedDateTime...? Yok artık sen de..!

 
sea715 2026-03-12

Nihayet

 
click 2026-03-12

C’nin time.h’ı -> Java’nın java.util.Date’i -> js’in Date’i

Java’nın joda-time -> JSR 310 -> java.time
-> moment.js -> js Temporal

Akış böyleymiş gibi görünüyor

 
GN⁺ 2026-03-12
Hacker News yorumları
  • Temporal'ın zaman yönetiminin karmaşıklığını gerçekten ele almaya zorlaması çok hoşuma gidiyor
    anlık zaman (instant) ile takvim tabanlı datetime arasındaki ayrım sayesinde Date ile sık yapılan hataların çoğu neredeyse önlenebiliyor
    biraz ayrıntılı olsa da, sabahın 3'ünde bir DST bug'ını düzeltmek için çağrılmaktan çok daha iyi
    • Teknik olarak bakarsak, sabahın 3'ünde DST bug'ı düzeltme işi pazar günleri dışında pek olmaz gibi
  • Ben de Python'da ISO8601 tarih ayrıştırma sorunları yüzünden neredeyse 10 yıllık bir çile çektim
    2012'de başlayan sorun sonunda standart kütüphanede bir çözüm olarak yerini aldı
    ilgili tartışmayı bu Google Groups zincirinde görebilirsiniz
    • Gerçekten minnettarım. fromisoformat dışındaki yollarla tarih ayrıştırmak artık bana fazla sezgisiz geliyor
      Eskiden ciso8601 kullanıyordum ama standarda girdikten sonra her şey çok daha basit ve güvenilir oldu
  • Firefox'un Temporal'ı henüz spesifikasyon aşamasındayken uygulayabilmesi André Bargull (Anba) sayesinde oldu,
    özellikle de bunun tamamını aslında tek başına bir gönüllü olarak yapmış olması çok etkileyici
  • Temporal büyük bir ilerleme ama yine de API'yi tam sevmiyorum
    İstemci ve sunucu arasında kod paylaştığım için veri ile mantığı katı biçimde ayırmaya çalışıyorum
    tüm veriyi saf JSON olarak tutup serileştirme/deserileştirmeyi kolaylaştırmak istiyorum ama Temporal nesneleri işlev özellikleri taşıyan sınıf örnekleri olduğu için rahatsız edici
    date-fns gibi yalnızca veri nesnelerine saf fonksiyonlar uygulayan yaklaşımın daha iyi olduğunu düşünüyorum
    • Bu kasıtlı bir tasarım. Temporal tipleri serileştirilebilir ama JSON.parse ile otomatik olarak geri yüklenmez
      geliştiricinin ISO dizgesinden doğru nesneyi kendisinin yeniden kurması gerekir
      otomatikleştirmek yanlış tiplerle uğraşma riskini artırır
      belgedeki Temporal.Instant reviver örneği faydalı olabilir
    • Ben de aynı sorunla sık karşılaşıyorum. JSON.parse/stringify yüzünden prototipin kaybolması yaygın bir mesele
      ama Temporal ekibinin seçiminin doğru olduğunu düşünüyorum. Tarih-saat mantığında, basit veri+fonksiyon yaklaşımından daha önemli olan şey tip güvenliği
      işlemleri nesneye bağlamak, PlainDate'in yanlışlıkla ZonedDateTime gibi ele alınmasını önleyebilir
      tRPC gibi yerlerde sınırda Temporal.from() ve toString() dönüşümlerini yapan ince bir katman eklemek yeterli
      biraz zahmetli ama tip güvenliğinden vazgeçmekten daha iyi bence
    • Aslında JavaScript'in Date örnekleri de aynı soruna sahip
      Date.toJSON var ama JSON ayrıştırılırken dizgenin yeniden Date'e çevrilmesi gerekiyor
      Temporal da aynı şekilde çalışıyor ve date-fns de sonuçta yerel Date örnekleri ile uğraşıyor
    • Tüm Temporal nesneleri .toString() ve Temporal.from() ile kolayca serileştirilebilir / deserileştirilebilir
    • JSON.parse'ın otomatik olarak Temporal nesneleri oluşturacak şekilde değiştirilmesinin fazla ileri giden bir yaklaşım olduğunu düşünüyorum
      Date ile aynı şekilde
      serialize: instant.toJSON()
      deserialize: Temporal.Instant.from(jsonDate)
      
      böyle açıkça işlemek doğru yaklaşım
  • Temporal'ın onaylanmasına gerçekten sevindim
    uzun zamandır emek veren tüm şampiyonları kutluyorum
    son birkaç yıldır temporal_rs üzerinde çalışmak keyifliydi
  • Java'nın zaman API'sini iyileştirme yolculuğundan (Joda-Time → JSR 310 → Java 8) da söz edilse ilginç olurdu
    JavaScript'in bu radikal önerisi 2018'de ortaya çıktığına göre, Java'nın yaklaşımının ne kadar etkisi olduğunu merak ediyorum
    • Joda'nın Moment.js'i etkilediğini, onun da TC39 tartışmalarına yansıdığını söylemek doğru olur
      TC39 diğer dillerdeki örnekleri inceledi ama JavaScript'e en uygun yönde uzlaşmaya vardı
      bence bu API, 9 yıla yayılan çalışmanın sonunda JS uzmanlarının tasarladığı en olgun uygulama
    • Evet, JavaScript de Java'dan Date'in kötü bir sürümünü almıştı
      ilgili detaylara bu HN zincirinde de bakılabilir
  • “Mocha döneminde Ken Smith Java'nın Date kodunu C'ye port etti” sözü komik
    çünkü Java'nın util.Date yapısı da aslında neredeyse C'nin time.h API'sinin bir portuydu
  • Safari'nin Temporal için kısmi destek verdiğini görünce güldüm
    artık Safari sanki IE'nin manevi halefi olmuş gibi
    • Safari yeni özellikleri benimsemede yavaş ama yine de düzenli biçimde uygulama yapıyor
      IE'nin sorunu yavaş olması değil, baskın konumdayken duraklamış olmasıydı
      şimdi imparatorluk koltuğunda Chrome var ve aslında Safari ile Firefox'a daha çok ihtiyaç var
      asıl sorun Chrome'a özel sitelerin giderek artması
    • 2026'ya gelinse bile mobil Safari'de yerel bir tarih seçici olmayacakmış gibi geliyor
  • Keşke Temporal'da bir interval tipi olsaydı
    const D = new Temporal()
    const t = new Interval({minutes:5})
    const v = D.add(t)
    
    • O şey Duration
      const D = Temporal.PlainDate.from("2020-06-16");
      const t = Temporal.Duration.from({ day: 1 });
      const v = D.add(t) // 2020-06-17
      
      MDN belgesine bakın
    • Evet, ona Duration deniyor
  • Bunun için 9 yıl boyunca 1x hızında zaman yolculuğu yapan ekibe teşekkürler