JavaScript Temporal API 2026: Date Nesnesine Veda! Modern Tarih/Saat Rehberi

22.04.2026 02:57 Haber
JavaScript Temporal API 2026: Date Nesnesine Veda! Modern Tarih/Saat Rehberi | Alesta Web

JavaScript'in en kötü tasarım kararlarından biri olan Date nesnesi artık tarihe karışıyor. TC39'un Mart 2026 toplantısında Temporal API, Stage 4'e yükseltildi ve ECMAScript 2026 standardına dahil edildi. Chrome 144 (Ocak 2026) ve Firefox 139'da (Mayıs 2025) varsayılan olarak açık. Alesta Web olarak bu rehberde Temporal API'nin ne olduğunu, neden gerekli olduğunu ve nasıl kullanıldığını gerçek örneklerle anlatıyoruz — yani JavaScript Temporal API tutorial olarak doğru yerdesiniz.

Date Nesnesinin Sorunları (Problems with JavaScript Date)

JavaScript'in Date nesnesi 1995'te Java'nın java.util.Date'inden kopyalandı. O günden beri en ufak bir değişiklik yapılmadı. Otuz yıl boyunca geliştiricileri delirten bu tasarım hatalarına bakın:

Date Nesnesinin Kötü Tasarımları / Date Object Problems

// 1. AY 0'DAN BAŞLIYOR! (Months are 0-indexed!)
const date = new Date(2026, 0, 1); // Ocak DEĞİL 0!
console.log(date.getMonth()); // 0 (Ocak / January)
// Yani Mart için 2 yazmalısınız — mantıksız!

// 2. MUTABİL NESNE! (Mutable object — dangerous!)
const myDate = new Date("2026-04-22");
myDate.setDate(25); // Orijinal değişti! (Original changed!)
// Referans geçince veri bozulabilir (data corruption risk)

// 3. TIMEZONE CEHENNEMI (Timezone hell)
new Date("2026-04-22"); // UTC olarak parse eder
new Date("2026/04/22"); // LOCAL timezone olarak parse eder
// Aynı string formatı farklı davranış! (Same format, different behavior!)

// 4. PARSE GÜVENİLMEZLİĞİ (Unreliable parsing)
new Date("2026-04-22T00:00:00")   // Local timezone
new Date("2026-04-22T00:00:00Z")  // UTC
// Hangisi hangisi? Tahmin etmek zorundayken hata kaçınılmaz!
⚠️ Neden Date Kötü? / Why Date is Bad?

Bu yüzden geliştiriciler yıllardır moment.js, date-fns, dayjs gibi harici kütüphanelere mahkumdu. Temporal API bu bağımlılığı sonlandırıyor (ending the dependency on date libraries).

Temporal API Nedir? (What is Temporal API?)

Temporal, JavaScript'e modern, immutable (değiştirilemez) ve timezone-aware tarih/saat işlemleri getiren yeni bir global namespace'dir. Tıpkı Math gibi global olarak erişilebilir — import gerektirmez.

Temporal'ın Temel Sınıfları (Core Classes):

Sınıf / Class Ne Temsil Ediyor? / Represents Örnek / Example
Temporal.PlainDateSadece tarih (date only)2026-04-22
Temporal.PlainTimeSadece saat (time only)14:30:00
Temporal.PlainDateTimeTarih + saat, timezone yok2026-04-22T14:30
Temporal.ZonedDateTimeTarih + saat + timezone2026-04-22T14:30+03:00[Europe/Istanbul]
Temporal.InstantKesin bir an (Unix timestamp)1745319000000000000n (nanosecond)
Temporal.DurationSüre (time span)P1Y2M3DT4H5M

Tarayıcı Desteği 2026 (Browser Support 2026)

Tarayıcı / Browser Durum / Status Sürüm / Version
Firefox✅ Tam Destek139+ (Mayıs 2025)
Chrome✅ Tam Destek144+ (Ocak 2026)
Edge? Beta DesteğiBeta sürümü
Safari? Technical PreviewSafari TP
Node.js? Polyfill gerekiyorYakında native
? Bugün Kullanabilir misiniz? / Can You Use It Today?

Chrome + Firefox dünya genelinde masaüstü kullanıcılarının büyük çoğunluğunu kapsıyor. Safari ve eski tarayıcılar için @js-temporal/polyfill kullanın (use polyfill for Safari and older browsers).

Temporal.PlainDate Kullanımı (Using Temporal.PlainDate)

Temel PlainDate İşlemleri / Basic PlainDate Operations

// Temporal.PlainDate: sadece tarih, saat yok, timezone yok
// Date only — no time, no timezone

// 1. Tarih oluşturma / Create date
const bugun = Temporal.PlainDate.from("2026-04-22");
console.log(bugun.year);   // 2026
console.log(bugun.month);  // 4 (Nisan — 1'den başlıyor! starts at 1!)
console.log(bugun.day);    // 22

// Artık aylar 0'dan başlamıyor! (Months no longer start at 0!)
const nisan = Temporal.PlainDate.from({ year: 2026, month: 4, day: 22 });

// 2. Bugünkü tarih / Today's date
const today = Temporal.Now.plainDateISO();
console.log(today.toString()); // "2026-04-22"

// 3. Tarih ekleme/çıkarma (IMMUTABLE!) / Add/subtract (IMMUTABLE!)
const birhaftasonra = bugun.add({ weeks: 1 });
console.log(birhaftasonra.toString()); // "2026-04-29"
// Orijinal değişmedi! (Original unchanged!)
console.log(bugun.toString()); // "2026-04-22" — hâlâ aynı!

// 4. İki tarih arasındaki fark / Difference between dates
const fark = birhaftasonra.since(bugun);
console.log(fark.days); // 7

Tarih Karşılaştırma / Date Comparison

const tarih1 = Temporal.PlainDate.from("2026-01-01");
const tarih2 = Temporal.PlainDate.from("2026-12-31");

// compare: -1, 0, veya 1 döndürür (returns -1, 0, or 1)
const sonuc = Temporal.PlainDate.compare(tarih1, tarih2);
console.log(sonuc); // -1 (tarih1 daha eski / tarih1 is earlier)

// Büyük/küçük kontrolü / Greater/less check
console.log(tarih1.equals(tarih2)); // false

Temporal.ZonedDateTime: Timezone Desteği

Timezone desteği Temporal'ın en güçlü özelliklerinden. Yaz saati değişikliklerini bile otomatik hallediyor!

ZonedDateTime Kullanımı / Using ZonedDateTime

// İstanbul saatiyle şu an / Current time in Istanbul timezone
const istanbul = Temporal.Now.zonedDateTimeISO("Europe/Istanbul");
console.log(istanbul.toString());
// "2026-04-22T14:30:00+03:00[Europe/Istanbul]"

// New York saatiyle aynı an / Same moment in New York timezone
const newYork = istanbul.withTimeZone("America/New_York");
console.log(newYork.toString());
// "2026-04-22T07:30:00-04:00[America/New_York]"

// Timezone'lar arası dönüşüm artık güvenli! (Safe timezone conversion!)

// Belirli bir timezone'da tarih/saat oluştur / Create in specific timezone
const toplanti = Temporal.ZonedDateTime.from({
  year: 2026,
  month: 4,
  day: 22,
  hour: 15,
  minute: 0,
  timeZone: "Europe/Istanbul"
});

// UTC'ye çevir / Convert to UTC
const utcAnı = toplanti.toInstant();
console.log(utcAnı.toString()); // 2026-04-22T12:00:00Z
✅ Alesta Web Deneyimi:

Yaz saati geçişlerini (daylight saving time changes) Date nesnesiyle yönetmek gerçek bir kabustu. ZonedDateTime bunu otomatik hallediyor — artık moment.js veya date-fns kullanmak zorunda değilsiniz (no more moment.js or date-fns needed).

Temporal.Duration: Süre Hesaplama (Duration Calculation)

Duration Örnekleri / Duration Examples

// Süre oluşturma / Create duration
const ikiHafta = Temporal.Duration.from({ weeks: 2 });
const birAyBesGun = Temporal.Duration.from({ months: 1, days: 5 });

// Tarihe süre ekle / Add duration to date
const bugun = Temporal.Now.plainDateISO();
const teslimatTarihi = bugun.add({ weeks: 2, days: 3 });
console.log(`Teslimat tarihi / Delivery date: ${teslimatTarihi}`);

// İki tarih arasındaki süreyi hesapla / Calculate duration between dates
const baslangic = Temporal.PlainDate.from("2026-01-01");
const bitis = Temporal.PlainDate.from("2026-04-22");

const gecenSure = bitis.since(baslangic, {
  largestUnit: "months"  // Ay cinsinden hesapla / Calculate in months
});

console.log(`${gecenSure.months} ay ${gecenSure.days} gün`);
// "3 ay 21 gün" (3 months 21 days)

// Süre karşılaştırma / Compare durations
const sure1 = Temporal.Duration.from({ hours: 2 });
const sure2 = Temporal.Duration.from({ minutes: 90 });
const hangisiBuyuk = Temporal.Duration.compare(sure1, sure2,
  { relativeTo: Temporal.Now.plainDateTimeISO() });
console.log(hangisiBuyuk); // 1 (sure1 daha büyük / sure1 is larger)

Date vs Temporal Karşılaştırma (Date vs Temporal Comparison)

Özellik / Feature Date (Eski / Old) Temporal (Yeni / New)
Immutability❌ Mutable✅ Immutable
Ay başlangıcı / Month indexing❌ 0'dan (0-indexed)✅ 1'den (1-indexed)
Timezone Desteği / Support❌ Sınırlı (Limited)✅ Tam (Full)
Parse Güvenilirliği / Reliability❌ Tutarsız (Inconsistent)✅ Tutarlı (Consistent)
Harici Kütüphane / External Libmoment.js, date-fns gerekli✅ Native, gerek yok
DST (Yaz Saati) Yönetimi❌ Manuel (Manual)✅ Otomatik (Automatic)

Polyfill Kullanımı (Using Polyfill for Older Browsers)

Safari ve eski tarayıcılar için polyfill şart. İki seçenek var:

@js-temporal/polyfill Kurulumu / Install Polyfill

# npm ile kur / Install with npm
npm install @js-temporal/polyfill

# Veya daha hafif alternatif / Or lighter alternative
npm install temporal-polyfill

Kullanım / Usage

// Projenizin entry point'ine ekleyin (add to project entry point)
import { Temporal, Intl, toTemporalInstant } from "@js-temporal/polyfill";

// Artık Safari'de de çalışır / Now works in Safari too
const today = Temporal.Now.plainDateISO();
console.log(today.toString()); // "2026-04-22"

// Native destek varsa polyfill devreye girmez
// Polyfill won't activate if native support exists

Alesta Web olarak yeni projelerde Native Temporal + Polyfill kombinasyonunu kullanıyoruz. Hem modern tarayıcılarda hız hem de eski tarayıcılarda uyumluluk sağlanıyor.

? Kaynaklar ve Referanslar / References

Alesta Web olarak tüm örnekleri Chrome 144 ve Firefox 139'da test ettik (tested in Chrome 144 and Firefox 139).

✅ Temporal API ile JavaScript Tarihleri Artık Anlaşılır! (Temporal API Makes Dates Finally Sane!)

30 yıllık beklemenin ardından JavaScript geliştiricileri modern bir tarih/saat API'sine kavuştu. Immutability, doğal ay indeksleme, dahili timezone desteği — bunların hepsi Temporal ile geliyor. Alesta Web olarak yeni projelerinizde moment.js veya date-fns yerine Temporal kullanmanızı şiddetle öneriyoruz.

Özet / Summary:

  • ✅ TC39 Stage 4: ECMAScript 2026 standardı (ECMAScript 2026 standard)
  • ✅ Chrome 144, Firefox 139: Native destek (native support)
  • ✅ Immutable nesneler — artık veri bozulması yok (no more data mutation)
  • ✅ Aylar 1'den başlıyor — sürpriz yok (months start at 1 — no surprises)
  • ✅ ZonedDateTime: DST otomatik yönetimi (automatic DST handling)
  • ✅ Polyfill: @js-temporal/polyfill ile eski tarayıcı desteği

Faydalı Linkler / Useful Links:

© 2026 AlestaWeb — Tüm hakları saklıdır.

WM Tools
💫

WebMaster Tools

15 Profesyonel Araç
Alesta AI
Alesta AI
Online