`Date` Nesnesi
Bu makale Date nesnesini açıklar.
Date nesnesini, temel mekanizmalardan uygulamada sıkça kullanılan işlemlere kadar, somut örneklerle adım adım açıklayacağız.
YouTube Video
Date Nesnesi
Date nesnesi nedir?
JavaScript Date nesnesi; tarih ve saatleri işlemek için kullanılan standart bir nesnedir. Dahili olarak, tarihi ve saati; 1 Ocak 1970, 00:00:00 UTC'den itibaren geçen milisaniye sayısına göre yönetir.
Öncelikle, mevcut tarih ve saati temsil eden bir Date nesnesi oluşturalım ve içeriğini kontrol edelim.
1const now = new Date();
2console.log(now);- Bu kod, çalıştırıldığı anda mevcut tarih ve saati temsil eden bir
Datenesnesi oluşturur. Görüntüleme formatı; tarayıcı veya işletim sistemi gibi yürütme ortamına bağlıdır.
Bir Date nesnesi nasıl oluşturulur
Date nesneleri, ihtiyacınıza göre birkaç farklı şekilde oluşturulabilir. Kolayca yanlış anlaşılabilecek çok önemli bir nokta ise; yapıcıya verilen ay argümanının sıfırdan başlamasıdır, yani aylar 0'dan başlar.
1const d1 = new Date(); // Current date and time
2const d2 = new Date("2025-01-01"); // Create from an ISO date string
3const d3 = new Date(2025, 0, 1); // January 1, 2025 (month is zero-based)
4const d4 = new Date(2025, 0, 1, 10, 30); // January 1, 2025, 10:30
5
6console.log(d1, d2, d3, d4);new Date(year, month, day)içinde,monthdeğeri için0Ocak ve11Aralık anlamına gelir. Bu özelliği anlamazsanız, farkında olmadan tarihi bir ay kaydırarak oluşturabilirsiniz; bu yüzden daima dikkatli olun.
Tarih ve Saatin Her Bir Elemanını Alma
Date nesnesinden yıl, ay, gün, saat ve haftanın gününü ayrı ayrı alabilirsiniz. Tüm alıcı (getter) metodları değerleri sayı olarak döndürür.
1const date = new Date();
2
3console.log(date.getFullYear()); // Year
4console.log(date.getMonth()); // Month (0-based: 0 = January)
5console.log(date.getDate()); // Day of the month
6console.log(date.getHours()); // Hours
7console.log(date.getMinutes()); // Minutes
8console.log(date.getSeconds()); // Seconds
9console.log(date.getDay()); // Day of the week (0 = Sunday, 6 = Saturday)
- Oluşturmada olduğu gibi,
getMonth()'un da sıfırdan başladığına dikkat edin. Görüntüleme için kullanılırken, değeri ayarlamak için genellikle 1 eklenir. getDay(), haftanın gününü bir sayı olarak döndürür. 0 Pazar'ı, 6 ise Cumartesi'yi temsil eder.
Tarih ve Saatleri Değiştirme
Date, değiştirilebilir (mutable) bir nesnedir; yani değerlerini sonradan değiştirebilirsiniz. Bu özellik faydalı olsa da; beklenmeyen yan etkiler konusunda dikkatli olmalısınız.
Mevcut bir Date nesnesinin değerlerini değiştirmek için set yöntemlerini kullanabilirsiniz.
1const date = new Date("2025-01-01");
2
3date.setFullYear(2026);
4date.setMonth(5); // June
5date.setDate(15);
6
7console.log(date);setMonth()da sıfırdan başlar. Orijinal nesne doğrudan değiştirilir.
Tarihleri Toplama ve Çıkarma
Tarih hesaplamalarını milisaniye ile veya setDate() ile yapmak yaygındır. Güne göre yapılan hesaplamalarda, setDate() kullanmak özellikle sezgisel ve güvenlidir.
1const date = new Date("2025-01-01");
2
3date.setDate(date.getDate() + 7);
4console.log(date);- Bu örnekte, belirtilen tarihten 7 gün sonrasını hesaplıyoruz. Toplama yeni bir aya geçse bile, tarih otomatik olarak ayarlanır.
Date Nesnelerini Karşılaştırmak
Date nesneleri sayı olarak karşılaştırılabilir. Bunun nedeni, dahili milisaniye değerinin karşılaştırılmasıdır.
1const a = new Date("2025-01-01");
2const b = new Date("2025-01-10");
3
4console.log(a < b); // true
5console.log(a > b); // false
- Tarihlerin sırasını belirlemek istiyorsanız, ek bir dönüşüme gerek yoktur. Karşılaştırma operatörlerini doğrudan kullanabilirsiniz.
Zaman Damgaları (Milisaniyeler) ile Çalışma
Date, milisaniyeleri (timestamp) temsil eden sayılara hem dönüştürülebilir hem de onlardan oluşturulabilir. Bu format genellikle API'lerde veya veritabanı entegrasyonlarında kullanılır.
1const now = Date.now();
2console.log(now);
3
4const date = new Date(now);
5console.log(date);Date.now()mevcut zamanı milisaniye olarak döndürür. Değeri sayı olarak kaydetmek ya da karşılaştırmak istediğinizde oldukça faydalıdır.
Tarihleri Dize Haline Formatlama
Bir Date nesnesini olduğu gibi göstermek, çoğu zaman ihtiyacınıza uygun bir format elde etmenizi sağlamaz. Bu nedenle, ona ihtiyacınıza göre açıkça bir format vermelisiniz.
1const date = new Date("2025-01-01");
2
3const formatted = `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`;
4console.log(formatted);- Bu şekilde elle formatlayarak, görüntüleme biçimini tamamen kontrol edebilirsiniz. Gerçek uygulamalarda, genellikle bu amaçla kütüphaneler kullanılır.
UTC ile Yerel Saat Arasındaki Fark
Date, hem yerel saat hem de UTC ile çalışmak için yöntemler sunar. Sunucu entegrasyonları ve uluslararası uyumluluk için bu farkı doğru anlamak önemlidir.
1const date = new Date();
2
3console.log(date.getHours()); // Local time (hours)
4console.log(date.getUTCHours()); // UTC time (hours)
getUTC*metodları daima UTC'ye göre değer döndürür. Zaman dilimleri arasında veri işlerken özellikle dikkatli olun.
Date Nesneleri Kullanılırken Dikkat Edilmesi Gerekenler
Date kullanışlıdır, ancak dikkat edilmesi gereken bazı karmaşık yönleri de vardır. Özellikle ayın sıfırdan başlaması ve nesnenin değiştirilebilir olması; sıkça hatalara yol açar.
Date'in değiştirilebilir olduğunun etkilerini görmek için aşağıdaki spesifik örneklere bakalım.
1const original = new Date("2025-01-01");
2const copy = new Date(original);
3
4copy.setDate(10);
5
6console.log(original);
7console.log(copy);- Orijinal tarih ve saati korumak istiyorsanız, her zaman bir kopya oluşturun. Sadece bu noktaya dikkat ederek, istenmeyen hatalardan kaçınabilirsiniz.
Date nesnesinin kullanımı neden zordur ve kütüphane kullanımı için kriterler nelerdir?
Date nesnesi standart bir fonksiyon olarak yeterli özellikler sunar, ancak pratikte kullanımı zor olabilecek durumlar vardır. Tipik sorunlar arasında ayların ve haftanın günlerinin sıfırdan başlaması, yerel saat ile UTC'nin karıştırılması eğilimi ve nesnenin değiştirilebilir olması yer alır. Bu sorunlar, tarih işlemleri arttıkça daha fazla hataya yol açabilir.
Date, basit tarih alma ve karşılaştırma işlemleri için yeterlidir, ancak daha fazla tarih hesabı veya görüntüleme formatlaması gerektiğinde kodun okunabilirliği ve bakımı zorlaşır.
Aşağıdaki gibi gereksinimleriniz varsa, dayjs veya date-fns gibi hafif tarih kütüphaneleri kullanmayı düşünebilirsiniz.
- Zaman dilimlerini açıkça yönetmeniz gerekiyor.
- Sık sık tarih veya aralık hesaplamaları yapmanız gerekiyor.
- Görüntüleme formatını esnek bir şekilde değiştirmek istiyorsunuz.
- Tarih ve saatleri değiştirilemez olarak yönetmek istiyorsunuz.
Özet
Date nesneleri, JavaScript'te tarih ve saat işlemenin en temel aracıdır. Zayıf yönlerini anlayıp, doğru şekilde oluşturma, alma, hesaplama ve biçimlendirme yaparak; gerçek dünyada güvenle kullanabilirsiniz.
Temel bilgileri kavradıktan sonra, gerektiğinde tarih kütüphaneleri kullanmak pratik bir seçimdir.
Yukarıdaki makaleyi, YouTube kanalımızda Visual Studio Code'u kullanarak takip edebilirsiniz. Lütfen YouTube kanalını da kontrol edin.