Javascript Tarih fonksiyonu (Ne kadar süre geçmiş hesaplama)

Javascript ile iki tarih arasında geçen süreyi gün , ay , yıl, saat, dakika ,saniye şeklinde yazdırma

Javascript Tarih fonksiyonu (Ne kadar süre geçmiş hesaplama)
Javascript ne kadar süre geçtiğini bulan fonksiyon

Arkadaşlar merhaba,
bugün sizlere kendim yazmış olduğum ve sık sık kullandığım , Javascript programlama dilinde kullanabileceğiniz aynı zamanda farklı programlama dillerine uyarlayabileceğiniz bir tarih fonksiyonunu anlatacağım.

Bu fonksiyon iki ayrı fonksiyondan oluşuyor , birincisi parametre ile geçmiş bir tarihi alıyor ve bize bir dizi olarak geçen süreleri döndürüyor .

İlk olarak aşağıdaki kodları yazıyoruz

var gelen_saat = typeof gelen_saat !== 'undefined' ? gelen_saat : "2010-01-01 01:02:03.123456";

Burada parametre olarak gelen_saat değerini alıyoruz eğer gelen saat boş ise 2010 tarihli bir saate eşitliyoruz isterseniz bunu yapmayabilirsiniz.

Aşağıda ise new Date() fonksiyonu ile gelen değerimizi tarih formatına çevirip ardından  getTime() fonksiyonu ile milisaniye cinsine çeviriyoruz.

 Bunun nedeni iki tarih arasındaki farkı almak için iki saatin de integer(tam sayı) değere dönüşmesi lazım . getTime() bize 1 Ocak 1974’den parametre olarak girilen tarihe kadar geçen milisaniye (saniye/1000) değerini verir. Şuanki tarih içinde aynı işlemi gerçekleştiriyoruz.

var gelen_saat = new Date(gelen_saat).getTime();
var suanki_saat = new Date().getTime();

Ardından gelen_saat değerimiz suanki_saat değerinden küçük mü diye kontrol ediyoruz. Eğer küçük ise milisaniye cinsinden gelen gelen farkı 1000’e bölüp saniye olarak farkı elde etmiş oluyoruz. Eğer parametre olarak girilen tarih şuanki tarihten büyük ise  gerekli hata bilgisini diziye atıp diziyi return ediyoruz.

if (gelen_saat < suanki_saat) {
    var sure_farki = (suanki_saat - gelen_saat) / 1000;
} else {
    array = {
        hata: "olumsuz"
    }
    return array;
}

Siz burada isterseniz büyük bir tarih kullanarak gelecekte bir tarihe ne kadar kaldığını da bulabilirsiniz , ancak ben örnek vermek gerekirse yazılan bir makalenin üzerinden ne kadar zaman geçmiş onu hesaplamak istiyorum. Kullanım tamamen sizin özelleştirmeleriniz ile geliştirilebilir.

Bu işlemlerin ardından hesaplama yaparken kolaylık olsun diye zaman dönüşümlerini programa tanıtıyorum.

var dakika = 60;
var saat = dakika * 60;
var gun = saat * 24;
var ay = gun * 30;
var yil = ay * 12 + (60*60*6);


Burada dakika = 60 saniye iken , saat= 60 * dakika saniye , yani 60*60 = 3600 saniye oluyor aynı şekilde gün ise 60*60*24 saniye oluyor , burada saniye cinsine çevirmemizdeki amaç yukarıda süre_farkı’nı saniye cinsinden almış olmamız.

Bu işlemin ardından geriye kalan kısımlar hesaplamaları yapmak ve diziye son değerleri basmak. Aşağıda gerekli işlemleri görebilirsiniz.

var yil_farki = Math.floor(sure_farki / yil);
var ay_farki = Math.floor((sure_farki % yil) / ay);
var gun_farki = Math.floor((sure_farki % ay) / gun);
var saat_farki = Math.floor((sure_farki % gun) / saat);
var dakika_farki = Math.floor((sure_farki % saat) / dakika);
var saniye_farki = Math.floor((sure_farki % dakika));

Kodları biraz karmaşık gözükebilir ,ama mantığını açıklayınca kafanızda oturacaktır.
Yukarıda tarihleri hesaplamak  mod (%) kullanıyoruz, mod bir sayısal değerin başka bir sayısal değere bölümünden kalan demektir. Süre farkı saniye cinsinden olduğu için biz de tarihleri tanımlarken onları saniye cinsinden hesaplamıştık. Math sınıfından Floor() fonksiyonu ise ondalıklı çıkan değerleri yuvarlamak için.

var yil_farki = Math.floor(sure_farki / yil);

bunu açmak gerekirse :
1 yıl =  saniye*dakika*saat*gun*ay*12 + 6 saat  = 1*60*60*24*30*12 + (60*60*6); formülü ile bulunur.
Biz de buradan bir yılın kaç saniye olduğunu buluyoruz ve elimizdeki saniye farkının kaç yıla tekabül ettiğini bulmak için bölme işlemi yapıyoruz .Elimize gelen sonuç kaç yıl geçtiğini bize söyleyecektir.

Daha sonra elimizde kalan saniye değeri ile devam etmemiz gerekecek bu nedenle mod kullanacağız.

var ay_farki = Math.floor((sure_farki % yil) / ay);

Ay farkını bulmak içinde sure_farkının bir yıla modunu alıyoruz, bu işlem bize örneğin aradan 5 yıllık tam süre geçmiş ise 0 değer döndürür ama diyelim 5 yıldan 10 saniye fazla 10 saniye değerini döndürür. Bu sayede mod ile kalan değeri ay’a yani bir ayın saniye cinsine dönüştürülmüş haline bölüp ne kadar ay geçtiğini hesaplıyoruz.
bu şekilde diğerleri de aynı işlemlerden geçiyor.

Ardından bu değerleri bir diziye atıyoruz.

array = {
    'yil_farki': yil_farki,
    'ay_farki': ay_farki,
    'gun_farki': gun_farki,
    'saat_farki': saat_farki,
    'dakika_farki': dakika_farki,
    'saniye_farki': saniye_farki
};

Bu diziyi fonksiyon ile return ediyoruz, fonksiyonun bitmiş hali:

function get_time_diff(gelen_saat) {
    var gelen_saat = typeof gelen_saat !== 'undefined' ? gelen_saat : "2014-01-01 01:02:03.123456";
    var gelen_saat = new Date(gelen_saat).getTime();
    var suanki_saat = new Date().getTime();

    if (isNaN(gelen_saat)) {
        return "";
    }

    if (gelen_saat < suanki_saat) {
        var sure_farki = (suanki_saat - gelen_saat) / 1000;
    } else {
        array ={
            hata:"olumsuz"
        }
        return  array;
    }
    var dakika = 60;
    var saat = dakika * 60;
    var gun = saat * 24;
    var ay = gun * 30;
    var yil = ay * 12;

    var yil_farki = Math.floor(sure_farki / yil);
    var ay_farki = Math.floor((sure_farki % yil) / ay);
    var gun_farki = Math.floor((sure_farki % ay) / gun);
    var saat_farki = Math.floor((sure_farki % gun) / saat);
    var dakika_farki = Math.floor((sure_farki % saat) / dakika);
    var saniye_farki = Math.floor((sure_farki % dakika));

    array = {
        'yil_farki': yil_farki,
        'ay_farki': ay_farki,
        'gun_farki': gun_farki,
        'saat_farki': saat_farki,
        'dakika_farki': dakika_farki,
        'saniye_farki': saniye_farki
    };
    return array;
}

Sıra geldi Javascript’te tarih farklarını Türkçe olarak yazdırmaya.

// Bu fonksiyon diğer fonksiyondan gelen diziyi parametre olarak alıyor.
function gecenSureYaz(dizi){
    if(dizi.yil_farki > 0){
        return dizi.yil_farki+" Yıl önce"
    }
    else if(dizi.ay_farki>0){
        return dizi.ay_farki +" Ay önce" ;
    }
    else if(dizi.gun_farki >0){
        return dizi.gun_farki +" Gün önce" ;
    }
    else if(dizi.saat_farki >0){
        return dizi.saat_farki + "Saat önce";
    }
    else if (dizi.dakika_farki>0){
        return dizi.saat_farki + "Dakika önce"
    }
    else if (dizi.saniye_farki >0){
        return dizi.saniye_farki + "Saniye önce"
    }
    else if (dizi.hata){ // Get_time fonksiyonuna gelecek bir tarih girdiğinde hata alıyoruz.
        return "Gelecek bir tarih girdiniz";
    }
    else{
        return "Şimdi";
    }
}

Bu görmüş olduğunuz fonksiyon içerisine parametre olarak dizi alıyor bu dizi ise diğer fonksiyon ile üretmiş olduğumuz dizinin ta kendisi. Örnek kullanım şekli aşağıda.

console.log(gecenSureYaz(get_time_diff("2021/02/26")));
Çıktı: 13 Gün önce

Yazmış olduğum ikinci fonksiyon görüntü kirliliği önlemek amaçlı yazılan bir fonkiyon o nedenle büyükten küçüğe doğru ilk olarak hangi değer varsa onu yazdırır örnek vermek gerekirse:

2 yıl 3 ay 4 gün geçti ise sadece "2 yıl önce" yazdıracaktır, veya 0 yıl 0 ay 0 gün 0 dakika 23 saniye geçti ise "23 saniye önce" değerini döndürecektir. Bu kullanımı ben kendime uyarladım sizler isterseniz tüm değerleri aynı anda yazdırabilirsiniz.

Eğer faydalı oldu ise yorumlarda belirtmeniz beni çok çok motive edicektir.
Yılmaz Kadan