JavaScript’in 30 Yıllık Kâbusu Bitiyor: ES2026 ile Gelen Yerleşik "Temporal API" Nedir?
JavaScript’in 30 Yıllık Kâbusu Bitiyor: ES2026 ile Gelen Yerleşik "Temporal API" Nedir?
Eğer hayatınızda bir kez bile JavaScript ile tarih ve saat işlemleri yapmak zorunda kaldıysanız, muhtemelen saçınızı başınızı yolmuşsunuzdur. new Date() nesnesinin öngörülemez davranışları, zaman dilimi (timezone) karmaşaları ve ayların 0'dan (Ocak) başlaması gibi absürtlükler, JavaScript topluluğunun 30 yıldır kanayan yarasıydı.
Bu acıyı dindirmek için yıllarca Moment.js, Day.js veya Luxon gibi harici kütüphanelere sığındık. Ancak bu durum projelerimize ekstra bundle boyutu ve performans yükü getirdi.
Nihayet beklenen gün geldi! ECMAScript 2026 (ES2026) ile JavaScript ekosistemine yerleşik olarak dahil edilecek olan Temporal API, bu kronik kâbusu sonsuza dek bitirmeye hazırlanıyor. Gelin, JavaScript tarih işlemlerinde devrim yaratacak bu yeni standardı yakından inceleyelim.
JavaScript'in Mevcut Date Nesnesi Neden Bu Kadar Kötüydü?
Temporal'ın getirdiği çözümleri anlamak için önce mevcut Date nesnesinin neden bir tasarım felaketi olduğunu hatırlayalım:
- Değiştirilebilirlik (Mutability):
Datenesneleri mutabledır. Yani bir tarih nesnesini başka bir değişkene kopyalayıp üzerinde işlem yaptığınızda, orijinal tarih de değişir. Bu durum, tespit edilmesi son derece zor olan bug'lara yol açar. - Kafası Karışık Zaman Dilimleri: Tarayıcının yerel saat dilimi ile UTC arasında dönüştürme yapmak tam bir işkencedir.
Datenesnesi, bilgisayarın yerel saat dilimini temel alır ve bunu kontrol etmek zordur. - 0 Tabanlı Aylar: Ocak ayının
0, Aralık ayının ise11olması, yazılım dünyasının en çok espri konusu olan mantık hatalarından biridir. - Sadece Tarih veya Sadece Saat Seçeneğinin Olmaması: Sadece bir doğum günü (Yıl-Ay-Gün) veya bir randevu saati (Saat-Dakika) kaydetmek isteseniz bile,
Datenesnesi sizi milisaniyeye kadar tüm zamanı ve zaman dilimini tutmaya zorlar.
Karşınızda Temporal API: Yeni Nesil Zaman Yönetimi
Temporal API, TC39 (JavaScript standartlarını belirleyen komite) tarafından geliştirilen ve şu anda Stage 3 (Aday) aşamasında olan, ES2026 ile standartlaşması kesinleşen yeni bir küresel nesnedir.
Temporal, Math veya JSON gibi global bir nesne olarak çalışır ve tamamen immutable (değiştirilemez) bir yapıya sahiptir. Yani yaptığınız hiçbir işlem orijinal veriyi bozmaz, her zaman yeni bir Temporal nesnesi döner.
Temporal API’nin Temel Veri Tipleri
Temporal, her ihtiyaca özel farklı veri tipleri sunarak karmaşayı önler:
| Veri Tipi | Ne İşe Yarar? | Örnek |
|---|---|---|
Temporal.PlainDate |
Zaman dilimi ve saat olmadan sadece tarih. | 2026-03-15 (Doğum günleri için ideal) |
Temporal.PlainTime |
Zaman dilimi ve tarih olmadan sadece saat. | 14:30:00 (Mağaza açılış saatleri için ideal) |
Temporal.PlainDateTime |
Zaman dilimi olmayan tarih ve saat. | 2026-03-15T14:30:00 |
Temporal.ZonedDateTime |
Zaman dilimi, tarih ve saat (En kapsamlı olanı). | 2026-03-15T14:30+03:00[Europe/Istanbul] |
Temporal.Duration |
İki zaman arasındaki süreyi belirtir. | 5 ay, 3 gün, 2 saat |
Temporal API ile Kod Örnekleri: Eski vs. Yeni
Gelin, Temporal API'nin hayatımızı nasıl kolaylaştıracağına kod örnekleriyle bakalım.
1. Bugünün Tarihini Almak (Artık Aylar 1'den Başlıyor!)
Eski yöntemde Mart ayını almak için garip hesaplar yapardık. Temporal ile her şey çok net:
// Eski Yöntem (Date)
const bugunEski = new Date();
console.log(bugunEski.getMonth()); // Mart ayı için 2 çıktısını verir! (0-indeksli)
// Yeni Yöntem (Temporal)
const bugunYeni = Temporal.Now.plainDateISO();
console.log(bugunYeni.toString()); // "2026-03-15" (Doğrudan okunabilir tarih)
console.log(bugunYeni.month); // 3 (Mart artık gerçekten 3!)
2. Tarih Ekleme ve Çıkarma İşlemleri
Eski Date nesnesinde bir tarihe 10 gün eklemek tam bir matematiksel cambazlıktı. Temporal ile bu işlem çocuk oyuncağı:
const baslangic = Temporal.PlainDate.from('2026-03-15');
// 1 hafta ve 3 gün ekleyelim
const yeniTarih = baslangic.add({ weeks: 1, days: 3 });
console.log(yeniTarih.toString()); // "2026-03-25"
// Orijinal tarih değişmedi (Immutable)
console.log(baslangic.toString()); // "2026-03-15"
3. Zaman Dilimleri (Timezones) Arası Dönüşüm
İstanbul'daki bir etkinliğin saatini Tokyo'daki bir kullanıcının yerel saatine çevirmek hiç bu kadar kolay olmamıştı:
const istanbulZamani = Temporal.ZonedDateTime.from('2026-03-15T14:00:00+03:00[Europe/Istanbul]');
// Tokyo saatine dönüştür
const tokyoZamani = istanbulZamani.withTimeZone('Asia/Tokyo');
console.log(tokyoZamani.toString()); // "2026-03-15T20:00:00+09:00[Asia/Tokyo]"
4. İki Tarih Arasındaki Farkı Bulmak (Duration)
İki tarih arasında kaç gün, kaç saat kaldığını bulmak için artık karmaşık milisaniye hesaplamalarına veya harici kütüphanelere ihtiyacımız yok:
const tarih1 = Temporal.PlainDate.from('2026-03-15');
const tarih2 = Temporal.PlainDate.from('2026-06-20');
const fark = tarih1.until(tarih2);
console.log(fark.toString()); // "P97D" (97 gün)
console.log(`${fark.days} gün kaldı.`); // "97 gün kaldı."
Neden Moment.js ve Day.js'e Veda Ediyoruz?
Yıllarca projelerimizin vazgeçilmezi olan bu kütüphanelere artık veda etme zamanı geldi. Neden mi?
- Performans ve Bundle Boyutu: Moment.js yaklaşık 300KB civarında devasa bir kütüphaneydi. Day.js daha hafif olsa da yine de projenize harici bir bağımlılık ekliyordu. Temporal, tarayıcının içinde yerleşik (native) olarak geleceği için projenize 0 KB yük getirecek.
- Standartlaşma: Tarayıcılar, Node.js ve Deno gibi tüm JavaScript çalışma ortamları bu API'yi yerleşik olarak destekleyecek. Kodunuz her yerde aynı kararlılıkla çalışacak.
Temporal API'yi Bugün Nasıl Kullanabiliriz?
Temporal API, ES2026 standardı ile tarayıcılara tamamen entegre edilmiş olacak. Ancak günümüzde modern tarayıcılar (Chrome, Firefox, Safari) bu özelliği yavaş yavaş deneysel olarak desteklemeye başladı bile.
Eğer bugünden projelerinizde Temporal kullanmak istiyorsanız, resmi polyfill kütüphanesini kullanabilirsiniz:
npm install @js-temporal/polyfill
Kodunuza import ederek hemen geleceğin JavaScript'ini yazmaya başlayabilirsiniz:
import { Temporal } from '@js-temporal/polyfill';
Sonuç: JavaScript Geliştiricileri İçin Yeni Bir Çağ
Temporal API, JavaScript tarihindeki en büyük ve en önemli güncellemelerden biri. 30 yıllık Date kâbusunu bitirerek, modern web geliştirme standartlarına yakışır, güvenli, hızlı ve geliştirici dostu bir deneyim sunuyor.
Siz projelerinizde tarih işlemleri için hangi kütüphaneleri kullanıyorsunuz? Temporal API hakkındaki düşünceleriniz neler? Yorumlarda bizimle paylaşın!