v2.5.2
Giriş yap

Javascript iki tarih arası hesaplama (local şekilde)

Anonim
1,393 defa görüntülendi

Merhabalar;
Site sunucusu UTC+1 formatta, js ile iki tarih arası hesaplama yaparken sorun yaşıyorum. Her ülkeye göre farklı bir hesaplama çıkıyor;

çünkü, belirttiğim tarihlerden birisi now date; dolayısı ile client'e ait tarih saat bilgisi alınıyor.

İstediğim şey ise şu;

TR saatiyle,endDate = 2022-12-25 15:00:00 tarihine kaç gün / saat / dakika / saniye kaldı bunu göstermek istiyorum.

Ama siteye öreğin almanya'dan girildiğinde endDate süresi ona göre şekillensin ve mesela 1 saat geri olarak alınsın.

Bunu nasıl yapabilirim?

ebykdrms
745 gün önce

Şu 2 fonksiyon yardımcı olsun:

const convertDate = (str, timezoneDiff) => {
    const t = str.split(/[- :]/);    
    t[1]--;
    return new Date(Date.UTC(...t) - 1000 * 60 * 60 * timezoneDiff);
}

const diffDate = (date1, date2) => {
    const t = date1-date2;
    if(t > 0) return {
        days: Math.floor(t / (1000 * 60 * 60 * 24)),
        hours: Math.floor((t % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)),
        minutes: Math.floor((t % (1000 * 60 * 60)) / (1000 * 60)),
        seconds: Math.floor((t % (1000 * 60)) / 1000)
    }
    return {days:0, hours:0, minutes:0, seconds:0}
}

Şu şekilde kullanalım:

let endDateString = "2022-12-25 15:00:00";

const now = new Date();
const endDate = convertDate(endDateString, 1);
const diff = diffDate(endDate, now);

Buradaki convertDate() fonkisyonunun
ilk parametresi MySQL datetime formatında gelen string türdeki tarih.
ikinci parametreyi de sunucunun saat dilimi olarak 1 gönderdik. (+1 anlamına geliyor)
Fonksiyon, sunucunun saat dilimini 0'a çekiyor ve sonra yerel saat dilimine (Türkiye için +3) göre js date objesi oluşturuyor.

diffDate() fonksiyonuna da
ilk parametrede js date objesi olarak sunucudan gelen tarihi,
ikinci parametre olarak da js date objesi olarak şu anki tarihi verdik.
Fonksiyon değerleri hesaplayıp obje halinde return ediyor.