İki saat arasındaki farkı bulmak - R10.net
  • 18-07-2021, 13:56:32
    #1
    Merhaba arkadaşlar elimde 2 adet javascript kodu var. 1. kod time zone (zn değişken) olarak saati ileri veya geri göstermektedir. 2. kod ise local saati göstermekte. İki saat arasındaki farkı nasıl elde edebilirim? Yardımcı olursanız sevinirim.

    1.kod
        function clockFormat(val) {
        val = val.toString();
    
        return val.length === 1 ? '0' + val : val;
    }
    
    function calculateClock(location) {
        var timezone = new Date(new Date().toLocaleString('en-US', { timeZone: location }));
        var h = timezone.getHours();
        var m = timezone.getMinutes();
        var s = timezone.getSeconds();
    
        h = clockFormat(h);
        m = clockFormat(m);
        s = clockFormat(s);
    
        return [ h, m, s ].join(':');
    
        //return [ h, m ].join(':');
    }
    
    function generateClock(location, thatElement, isSelf) {
        if(typeof thatElement === typeof undefined) {
            thatElement = document.getElementsByTagName('body')[0];
            isSelf = false;
        } else {
            if(typeof isSelf === typeof undefined) { isSelf = false; }
        }
    
        var data = calculateClock(location);
        var elem;
    
        if(isSelf === false) {
            elem = document.createElement('span');
            thatElement.appendChild(elem);
        } else {
            elem = thatElement;
        }
        elem.innerText = data;
    
        setInterval(function() {
            elem.innerText = calculateClock(location);
        }, 1000);
    }
    if(!zn) {var zn = 'America/New_York';}
    
    var locations = [
    ''+zn+'','America/New_York','Europe/Paris','America/Argentina/Buenos_Aires','Asia/Dubai','Asia/Bangkok','America/Lima',
    ];
    var parent = document.getElementById('clocks');
    
    for(var i = 0; i < locations.length; i++) {
        generateClock(locations[i], parent);
    }
    for(var i = 0; i < locations.length; i++) {
        generateClock(locations[i], document.getElementById(locations[i]), true);
    }
    2.kod
     function myClock(){setTimeout(function() {
    const d = new Date();const n = d.toLocaleTimeString();
    document.getElementById("wsaat").innerHTML = n;
    myClock();}, 1000)}myClock();
  • 18-07-2021, 15:53:39
    #2
    1.kod biraz karışık sanırım. Daha sade ve anlaşılır olanı:
    <script>
    var aSaat = document.getElementById("saat"); //aSaat adında bir değişken tanımladık.
    function format(saatcek) {
    var bSaat = saatcek.toString();
    if (bSaat.length == 1) {
    return "0" + bSaat;
    } else {
    return bSaat;
    }}
    function saatGuncelleme() { //Burada bilgisayarımızdan saati çekiyoruz.
    var tarih = new Date();
    
    var TimeZone = new Date(tarih.toLocaleString('en-US', { timeZone: 'Asia/Shanghai' }));
    
    var saat = TimeZone.getHours(); //Burada saati çekiyoruz.
    var dakika = TimeZone.getMinutes(); //Burada dakikayı çekiyoruz.
    var saniye = TimeZone.getSeconds(); //Burada saniyeyi çekiyoruz.
    aSaat.textContent = format(saat) + ":" + format(dakika) + ":" + format(saniye); //Burada ekranımıza çıktımızı veriyoruz.
    }
    setInterval(saatGuncelleme, 1000);
    </script>
  • 18-07-2021, 21:15:05
    #3
    Benim anladığım şu: Bir lokasyon girmek istiyorsun ve onun bilgisayar lokasyonuna olan zaman farkının dönmesini istiyorsun.

    Aşağıda bunun için yazdığım kodu görebilirsin:
    function calcDiffTime(a, b){
        if(a==undefined) throw new Error('a musn\'t be empty!');
    
        var location1, location2;
        if(b==undefined){ //usage: calcDiffTimeFrom('America/New_York') [== calcDiffTimeFrom('Europe/Istanbul', 'America/New_York')]
            //Time differences between computer time and location time(a)
            location2 = a;
            location1 = Intl.DateTimeFormat().resolvedOptions().timeZone;
        }
        else{ //usage: calcDiffTimeFrom('Europe/Istanbul', 'America/New_York')
            //Time differences between location1 time(a) and location2 time(b)
            location1 = a;
            location2 = b;
        }
    
        var now = new Date();
        var parseDate = t=> { //"18.07.2021 20:49:07"
            t = t.split(' '); //["18.07.2021", "20:49:07"]
            t[0] = t[0].split('.').reverse(); //[["2021","07","18"], "20:49:07"]
            t[1] = t[1].split(':'); //[["2021","07","18"], ["20","49","07"]
            t = [...t[0],...t[1]].map(n=>parseInt(n)); //[2021,7,18,20,49,7]
            --t[1]; //[2021,6,18,20,49,7]
            return t; // //[2021,7,18,20,49,7]
        }
        var createDate = location => new Date(
            ...parseDate(
                now.toLocaleString("tr-tr", {timeZone:location}) //"18.07.2021 20:49:07"
            )//[2021,6,18,20,49,7]
        ); //new Date(2021,6,18,20,49,7)
        
        var d1 = createDate(location1), d2 = createDate(location2);
    
        return (d1.getTime() - d2.getTime())/3600000; //hours
    };
    
    var computerTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
    
    //Örnek 1: PC lokasyonu ve America/New_York arasındaki saat farkı
    let diff1 = calcDiffTime("America/New_York");
    console.log(diff1); //7, pozitif değer yani pc zamanı new york'tan 7 saat ilerde
    
    //Örnek 2: Önceki örnekle aynı
    let diff2 = calcDiffTime(computerTimeZone, "America/New_York")
    console.log(diff1==diff2); //true
    
    //Örnek 3:
    let diff3 = calcDiffTime("America/New_York", computerTimeZone);
    console.log(diff3); //-7, new york, pc lokasyonuna göre 7 saat geride
    console.log(diff1==(diff3*-1)); //true
    
    //Örnek 4:
    let diff4 = calcDiffTime("Europe/Berlin");
    console.log(diff4); //1
    
    //Örnek 5:
    let diff5 = calcDiffTime("Europe/Berlin", "America/New_York");
    console.log(diff5); //6 | pc saatine göre; berlin 1 saat geriydi, new york ta 7 saat geriydi. O zaman berlin new york'a göre 6 saat ileridir
    Bu da saat dilimini bulmak için;
    function getTimeZoneOffset(a){
        var comTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
        var comTimeZoneOffset = new Date().getTimezoneOffset()/-60;
        var diff = calcDiffTime(a);
        return comTimeZoneOffset-diff;
    }
    
    //ÖRNEKLER
    console.log(getTimeZoneOffset("Asia/Tokyo")); //9
    console.log(getTimeZoneOffset("Europe/Oslo")); //2
    console.log(getTimeZoneOffset("Asia/Kolkata")); //5.5
  • 18-07-2021, 23:38:32
    #4
    Aradığım tam olarak buydu. Cevap için teşekkürler.
    Criyessei adlı üyeden alıntı: mesajı görüntüle
    Benim anladığım şu: Bir lokasyon girmek istiyorsun ve onun bilgisayar lokasyonuna olan zaman farkının dönmesini istiyorsun.

    Aşağıda bunun için yazdığım kodu görebilirsin:
    function calcDiffTime(a, b){
        if(a==undefined) throw new Error('a musn\'t be empty!');
    
        var location1, location2;
        if(b==undefined){ //usage: calcDiffTimeFrom('America/New_York') [== calcDiffTimeFrom('Europe/Istanbul', 'America/New_York')]
            //Time differences between computer time and location time(a)
            location2 = a;
            location1 = Intl.DateTimeFormat().resolvedOptions().timeZone;
        }
        else{ //usage: calcDiffTimeFrom('Europe/Istanbul', 'America/New_York')
            //Time differences between location1 time(a) and location2 time(b)
            location1 = a;
            location2 = b;
        }
    
        var now = new Date();
        var parseDate = t=> { //"18.07.2021 20:49:07"
            t = t.split(' '); //["18.07.2021", "20:49:07"]
            t[0] = t[0].split('.').reverse(); //[["2021","07","18"], "20:49:07"]
            t[1] = t[1].split(':'); //[["2021","07","18"], ["20","49","07"]
            t = [...t[0],...t[1]].map(n=>parseInt(n)); //[2021,7,18,20,49,7]
            --t[1]; //[2021,6,18,20,49,7]
            return t; // //[2021,7,18,20,49,7]
        }
        var createDate = location => new Date(
            ...parseDate(
                now.toLocaleString("tr-tr", {timeZone:location}) //"18.07.2021 20:49:07"
            )//[2021,6,18,20,49,7]
        ); //new Date(2021,6,18,20,49,7)
        
        var d1 = createDate(location1), d2 = createDate(location2);
    
        return (d1.getTime() - d2.getTime())/3600000; //hours
    };
    
    var computerTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
    
    //Örnek 1: PC lokasyonu ve America/New_York arasındaki saat farkı
    let diff1 = calcDiffTime("America/New_York");
    console.log(diff1); //7, pozitif değer yani pc zamanı new york'tan 7 saat ilerde
    
    //Örnek 2: Önceki örnekle aynı
    let diff2 = calcDiffTime(computerTimeZone, "America/New_York")
    console.log(diff1==diff2); //true
    
    //Örnek 3:
    let diff3 = calcDiffTime("America/New_York", computerTimeZone);
    console.log(diff3); //-7, new york, pc lokasyonuna göre 7 saat geride
    console.log(diff1==(diff3*-1)); //true
    
    //Örnek 4:
    let diff4 = calcDiffTime("Europe/Berlin");
    console.log(diff4); //1
    
    //Örnek 5:
    let diff5 = calcDiffTime("Europe/Berlin", "America/New_York");
    console.log(diff5); //6 | pc saatine göre; berlin 1 saat geriydi, new york ta 7 saat geriydi. O zaman berlin new york'a göre 6 saat ileridir
    Bu da saat dilimini bulmak için;
    function getTimeZoneOffset(a){
        var comTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
        var comTimeZoneOffset = new Date().getTimezoneOffset()/-60;
        var diff = calcDiffTime(a);
        return comTimeZoneOffset-diff;
    }
    
    //ÖRNEKLER
    console.log(getTimeZoneOffset("Asia/Tokyo")); //9
    console.log(getTimeZoneOffset("Europe/Oslo")); //2
    console.log(getTimeZoneOffset("Asia/Kolkata")); //5.5
R10.net sizlere daha iyi hizmet sunmak için çerezleri kullanıyor.R10.net'i kullanarak çerezleri kullanmamızı kabul etmiş olacaksınız.
Detaylı bilgi almak için Gizlilik ve Çerez Politikası metnimizi inceleyebilirsiniz.