« Tüm yayınlar

JavaScript Date Nesnesi: Üretime Sızan Gizli Tuzaklar

JavaScript Date nesnesinin ayrıştırma, mutasyon ve saat dilimi tuzakları ile Temporal API'nin sunduğu çözümler üzerine mühendisler için teknik inceleme.

JavaScript'in yerleşik Date nesnesi, 1995'te on günde yazılmış ve Java'nın kendi terk ettiği java.util.Date sınıfı örnek alınarak tasarlanmış bir API. Otuz yıldır tarih mantığını sessizce bozan davranışlar; ISO tarih dizelerinin UTC gece yarısı olarak yorumlanması, ay indekslerinin 0'dan başlaması, setDate/setMonth gibi metodların çağıran nesneyi mutasyona uğratması ve geçersiz dizelerde hata fırlatmak yerine kullanılamaz bir 'Invalid Date' üretmesi hâlâ yaygın üretim hatalarının kaynağı.

Sorun sadece sözdizimi değil: aynı an (instant), getDate() ile yerel saat diliminde farklı bir gün, getUTCDate() ile farklı bir gün döndürebiliyor. Yaz saati geçişlerinde bazı 'yerel günler' 23 veya 25 saat sürüyor; bu da faturalama, oran sınırlama ve SLA hesaplamalarında sessiz veri kaymalarına yol açabiliyor. JSON.stringify her zaman UTC ISO dizesi ürettiği için, başka bir sistem bu değeri yerel saat olarak yorumladığında orijinal saat dilimi niyeti tamamen kayboluyor.

Modern motorlarda kullanılabilir hale gelen Temporal API, bu sorunların çoğunu kökten çözüyor: PlainDate ve Instant gibi net tip sınırları, bir tabanlı takvim alanları, değişmez (immutable) işlemler ve belirsiz girdilerde sessiz kaymalar yerine açık ayrıştırma hataları. Henüz Date'e bağımlı kalan kod tabanları için ise date-fns, dayjs veya luxon gibi kütüphanelerle katı ayrıştırma ve UTC tabanlı saklama pratik bir güvenlik ağı sağlıyor.