2 Temmuz 2016 Cumartesi

Javascript'de Date Nesnesi

Merhaba Webkolog'un Zaman Yolcuları! :)

Bugün JavaScript'in en sık kullanılan, ancak bazen en çok kafa karıştıran nesnelerinden birini, yani Date Nesnesini inceleyeceğiz. Web uygulamalarında tarih ve saat verileriyle çalışmak neredeyse kaçınılmazdır: kullanıcı kayıt tarihlerini göstermekten, etkinlik takvimleri oluşturmaya, zamanlayıcılardan yaş hesaplamalarına kadar birçok senaryoda Date nesnesine ihtiyaç duyarız. JavaScript'in yerleşik Date nesnesi, bu karmaşık zaman kavramlarını yönetmemiz için bize güçlü bir arayüz sunar. Hadi, zamanı kodla yakalamanın inceliklerini öğrenelim!


Date Nesnesi Nedir ve Neden Önemlidir?

JavaScript'teki Date nesnesi, tarihleri ve saatleri temsil etmek ve bu değerler üzerinde işlem yapmak için kullanılır. Tarih ve saat bilgileri genellikle UTC (Koordineli Evrensel Zaman), yani Greenviç Ortalama Zamanı (GMT) ile aynı olan uluslararası bir standart temel alınarak saklanır. Ancak, bu değerleri kullanıcıya gösterirken veya kullanıcıdan alırken yerel saat dilimleri devreye girer.

Date nesnesi, 1 Ocak 1970 UTC'den (Unix Epoch) bu yana geçen milisaniye sayısını temel alır. Bu milisaniye değeri, bir tarih ve saat noktasını benzersiz bir şekilde temsil eder.

Date nesnesi, şu gibi durumlarda bize yardımcı olur:

  • Mevcut tarih ve saati almak.
  • Belirli bir tarih ve saati oluşturmak.
  • Tarih ve saat bileşenlerini (yıl, ay, gün, saat vb.) almak veya ayarlamak.
  • Tarihleri biçimlendirmek ve karşılaştırmak.
  • Farklı zaman dilimleriyle çalışmak.

Date Nesnesi Oluşturma

Date nesnesini oluşturmanın birkaç yolu vardır:

1. Mevcut Tarih ve Saati Alma

Argüman vermeden new Date() çağırırsanız, o anki tarih ve saati içeren bir Date nesnesi oluşturulur.


    const simdi = new Date();
    console.log(simdi); // Örnek: Fri Jul 05 2024 02:17:47 GMT+0300 (GMT+03:00)
2. Belirli Bir Tarih ve Saat ile Oluşturma

Farklı argümanlarla belirli bir tarih ve saat oluşturabilirsiniz:

  • new Date(year, month, day, hours, minutes, seconds, milliseconds): Bu, en yaygın ve esnek yöntemdir. Ay (month) 0'dan başlar (Ocak: 0, Aralık: 11). Diğerleri normal sayıdır.
  • 
            // 15 Ağustos 2024, 14:30:00
            const dogumGunu = new Date(2024, 7, 15, 14, 30, 0);
            console.log(dogumGunu); // Thu Aug 15 2024 14:30:00 GMT+0300 (GMT+03:00)
    
            // Sadece yıl ve ay (gün 1 olarak kabul edilir, saat 00:00:00)
            const sadeceAy = new Date(2024, 10); // 1 Kasım 2024
            console.log(sadeceAy);
        
  • new Date(milliseconds): 1 Ocak 1970 UTC'den bu yana geçen milisaniye sayısına göre bir tarih oluşturur.
    
                const milisaniyeTarih = new Date(0); // 1 Ocak 1970 UTC (Yerel saate göre değişir)
                console.log(milisaniyeTarih); // Thu Jan 01 1970 ...
    
                const onDakikaSonra = new Date(Date.now() + 10 * 60 * 1000);
                console.log(onDakikaSonra);
            
  • new Date(dateString): Bir tarih string'ini ayrıştırarak bir tarih nesnesi oluşturmaya çalışır. Farklı formatları destekleyebilir, ancak tarayıcılar arası tutarlılık sorunları yaşanabileceği için belirli bir format kullanmak daha güvenlidir (örneğin ISO 8601).
    
                const stringTarih = new Date("2024-07-15T10:00:00Z"); // ISO 8601 formatı (UTC)
                console.log(stringTarih);
    
                const stringTarih2 = new Date("July 15, 2024 10:00:00"); // Bazı tarayıcılar tarafından desteklenir
                console.log(stringTarih2);
            

Date Nesnesi Metotları (Yerel Zamana Göre)

Bu metotlar, kullanıcının yerel zaman dilimine göre tarih ve saat bileşenlerini almanızı veya ayarlamanızı sağlar.

1. Tarih Bileşenlerini Alma
  • getDate(): Ayın gününü döndürür (1-31).
    
                const tarih = new Date(); // Şu anki tarih
                console.log(tarih.getDate()); // Ayın günü (örneğin 5)
            
  • getDay(): Haftanın gününü döndürür (0=Pazar, 1=Pazartesi, ..., 6=Cumartesi).
    
                console.log(tarih.getDay()); // Haftanın günü (örneğin 5 = Cuma)
            
  • getMonth(): Ayı döndürür (0=Ocak, ..., 11=Aralık).
    
                console.log(tarih.getMonth()); // Ay (örneğin 6 = Temmuz)
            
  • getFullYear(): Dört basamaklı yılı döndürür.
    
                console.log(tarih.getFullYear()); // Yıl (örneğin 2024)
            
2. Saat Bileşenlerini Alma
  • getHours(): Saati döndürür (0-23).
    
                console.log(tarih.getHours()); // Saat (örneğin 2)
            
  • getMinutes(): Dakikayı döndürür (0-59).
    
                console.log(tarih.getMinutes()); // Dakika (örneğin 17)
            
  • getSeconds(): Saniyeyi döndürür (0-59).
    
                console.log(tarih.getSeconds()); // Saniye (örneğin 47)
            
  • getMilliseconds(): Milisaniyeyi döndürür (0-999).
    
                console.log(tarih.getMilliseconds()); // Milisaniye
            
  • getTime(): 1 Ocak 1970 UTC'den bu yana geçen milisaniye sayısını döndürür.
    
                console.log(tarih.getTime()); // Örnek: 1720135067890
            
3. Tarih ve Saat Bileşenlerini Ayarlama

get...() metotlarına karşılık gelen set...() metotları bulunur. Örneğin:

  • setDate(day): Ayın gününü ayarlar.
    
                const yarin = new Date();
                yarin.setDate(yarin.getDate() + 1); // Tarihi bir gün ileri alır
                console.log(yarin.toDateString());
            
  • setMonth(month, day): Ayı ayarlar. İsteğe bağlı olarak günü de ayarlayabilirsiniz.
    
                const gelecektekiAy = new Date();
                gelecektekiAy.setMonth(gelecektekiAy.getMonth() + 1); // Ayı bir ay ileri alır
                console.log(gelecektekiAy.toDateString());
            
  • setFullYear(year, month, day): Yılı ayarlar. İsteğe bağlı olarak ay ve günü de ayarlayabilirsiniz.
    
                const yeniYil = new Date();
                yeniYil.setFullYear(2025);
                console.log(yeniYil.toDateString());
            
  • setHours(hours, minutes, seconds, milliseconds): Saati ayarlar.
    
                const simdi = new Date();
                simdi.setHours(simdi.getHours() + 2); // Saati 2 saat ileri alır
                console.log(simdi.toLocaleTimeString());
            
  • setTime(milliseconds): 1 Ocak 1970 UTC'den itibaren geçen milisaniye sayısını ayarlayarak tarihi ve saati belirler.
    
                const sifirTarihi = new Date();
                sifirTarihi.setTime(0);
                console.log(sifirTarihi.toUTCString()); // Thu, 01 Jan 1970 00:00:00 GMT
            

UTC (Evrensel Zaman) Metotları

Yukarıdaki metotların çoğunun, zaman diliminden bağımsız olarak UTC zamanını döndüren veya ayarlayan getUTC...() ve setUTC...() versiyonları da vardır.

  • getUTCDate(), getUTCMonth(), getUTCFullYear(), getUTCHours(), vb.
  • setUTCDate(), setUTCMonth(), setUTCFullYear(), setUTCHours(), vb.
  • getTimezoneOffset(): Yerel zaman dilimi ile UTC arasındaki dakika cinsinden farkı döndürür.
    
                const now = new Date();
                console.log(now.getTimezoneOffset()); // Örnek: -180 (Türkiye için -3 saat * 60 dakika)
            

Date Nesnesini String'e Dönüştürme ve Biçimlendirme

Date nesnesini kullanıcıya okunabilir bir formatta göstermek için çeşitli string dönüştürme metotları bulunur:

  • toString(): Tarihi, saat dilimi bilgisiyle birlikte tam bir string olarak döndürür.
    
                const tarih = new Date();
                console.log(tarih.toString()); // Fri Jul 05 2024 02:17:47 GMT+0300 (GMT+03:00)
            
  • toDateString(): Tarihin sadece gün, ay, yıl kısmını okunabilir bir string olarak döndürür.
    
                console.log(tarih.toDateString()); // Fri Jul 05 2024
            
  • toTimeString(): Saatin sadece saat dilimi bilgisiyle birlikte string olarak döndürür.
    
                console.log(tarih.toTimeString()); // 02:17:47 GMT+0300 (GMT+03:00)
            
  • toLocaleString(): Tarih ve saati kullanıcının yerel ayar formatına göre bir string olarak döndürür.
    
                console.log(tarih.toLocaleString('tr-TR')); // 5.07.2024 02:17:47
                console.log(tarih.toLocaleString('en-US')); // 7/5/2024, 2:17:47 AM
            
  • toLocaleDateString(): Sadece tarihi kullanıcının yerel ayar formatına göre string olarak döndürür.
    
                console.log(tarih.toLocaleDateString('tr-TR')); // 5.07.2024
            
  • toLocaleTimeString(): Sadece saati kullanıcının yerel ayar formatına göre string olarak döndürür.
    
                console.log(tarih.toLocaleTimeString('tr-TR')); // 02:17:47
            
  • toUTCString(): Tarihi UTC formatında bir string olarak döndürür.
    
                console.log(tarih.toUTCString()); // Fri, 05 Jul 2024 02:17:47 GMT
            
  • toISOString() (ES6+): Tarihi ISO 8601 formatında bir string olarak döndürür (YYYY-MM-DDTHH:mm:ss.sssZ). Bu format, genellikle sunucular arası veri alışverişi için tercih edilir.
    
                console.log(tarih.toISOString()); // 2024-07-04T23:17:47.890Z (UTC saati)
    
                // YYYY-MM-DD formatında tarih almak için pratik yol
                const bugunISO = new Date().toISOString().slice(0, 10);
                console.log(bugunISO); // 2024-07-05
            

Statik Metotlar

  • Date.now() (ES5+): 1 Ocak 1970 UTC'den bu yana geçen milisaniye sayısını döndürür. Performans ölçümü veya benzersiz zaman damgaları oluşturmak için idealdir.
    
                const baslangicZamani = Date.now();
                // ... bazı işlemler ...
                const bitisZamani = Date.now();
                console.log(`İşlem ${bitisZamani - baslangicZamani} milisaniye sürdü.`);
            
  • Date.parse(dateString): Bir tarih string'ini ayrıştırır ve 1 Ocak 1970 UTC'den bu yana geçen milisaniye sayısını döndürür. Başarısız olursa NaN döndürür.
    
                console.log(Date.parse("2024-07-15")); // 1721001600000
            
  • Date.UTC(year, month, day, hours, minutes, seconds, milliseconds): UTC'ye göre bir tarih oluşturur ve 1 Ocak 1970 UTC'den bu yana geçen milisaniye sayısını döndürür.
    
                console.log(Date.UTC(2024, 6, 15)); // 1721001600000 (15 Temmuz 2024 00:00:00 UTC)
            

Sonuç

JavaScript'in Date nesnesi, web uygulamalarınızda tarih ve saatle ilgili hemen hemen her ihtiyacınızı karşılayacak zengin bir araç setidir. Anlık zamanı almaktan, belirli bir tarih oluşturmaya, bileşenleri ayıklamaktan, farklı formatlarda görüntülemeye ve hatta zaman dilimleriyle çalışmaya kadar geniş bir yelpazede fonksiyonlar sunar. Başlangıçta biraz karmaşık görünebilse de, UTC ve yerel zaman kavramlarını kavradıkça ve metotları kullanarak pratik yaptıkça bu nesnede ustalaşacaksınız.

Uygulamalarınızda zamanı etkin bir şekilde yönetmek için bu metotları kullanmaktan çekinmeyin. Zaman her şeydir, değil mi?

Webkolog'u takipte kalın!

Hepinize bol kodlu ve keyifli öğrenme süreçleri dilerim!

0 yorum:

Yorum Gönder