Porovnejte dvě data v JavaScriptu

Úvod

Data jsou opravdu běžným datovým typem, se kterým vývojáři pracují. Od časových razítek určitých akcí po přehledy, funkce registrace a časově omezený přístup v systémech, které vyžadují předplatné – často musíme porovnávat data.

To znamená, že porovnáváme, zda je datum po nebo před jiným, zda je datum dnes , kolik dní je mezi daty atd.

V tomto článku se podíváme na to, jak porovnat dvě data v JavaScriptu , což nám pomáhá odvodit, zda je datum před nebo po jiném.

Datum Objekt v JavaScriptu

Weboví vývojáři běžně používají externí balíčky (jako Moment.js) ke zpracování dat a času. Ale jak se moderní web vyvíjel, JavaScript zavedl nový objektový konstruktor nazvaný Date pro zpracování dat a času.

To znamená, že k provádění základních kontrol a operací nepotřebujete externí knihovnu, což usnadňuje provádění těchto věcí ve Vanilla JS.

Date class je pod pokličkou opravdu snadno pochopitelný – pouze ukládá Unixový čas měřeno v milisekundách.

I když se tato implementace zdá trochu zjednodušená, přidání Date třída byla docela velkým zlepšením, protože konečně došlo na úroveň abstrakce mezi vývojáři a nezpracovanými daty.

Nyní se podívejme na různé způsoby porovnání dvou dat pomocí Date objektů.

Porovnání dvou dat v JavaScriptu

Můžeme použít porovnávací operátory jako < a > dva porovnávají dva Date objekty a pod kapotou se efektivně porovnávají jejich počítadla času. Efektivně porovnáváte dva celočíselné čítače:

function dateCompare(d1, d2){
    const date1 = new Date(d1);
    const date2 = new Date(d2);

    if(date1 > date2){
        console.log(`${d1} is greater than ${d2}`)
    } else if(date1 < date2){
        console.log(`${d2} is greater than ${d1}`)
    } else{
        console.log(`Both dates are equal`)
    }
}

dateCompare("6/11/2020", "7/8/2019")
dateCompare("01/01/2021", "01/01/2021")

Výsledkem je:

6/11/2020 is greater than 7/8/2019
Both dates are equal

Jak vidíme, porovnávání dat se scvrkává na převod poskytnutých řetězců na Date objektů a jejich porovnání s vhodným porovnávacím operátorem.

Poznámka: Operátory rovnosti (== a === ) nefungují s Date objekty, takže explicitně nekontrolujeme, zda jsou stejné.

Dalším způsobem, jak porovnat dvě data, je použití vestavěného getTime() metoda.

getTime() metoda vrací počet milisekund, které uplynuly od epochy Unixu. Navíc můžete použít getDate() , getHours() , getDay() , getMonth() a getYear() metody pro další specifikaci a porovnání informací, mimo jiné podobně pojmenované metody.

Kromě toho můžete také použít getUTCDay() , getUTCDate() , getUTCHour() , getUTCMinute() , atd. metody, které vracejí dané dočasné identifikátory, zónované specificky do UTC.

Poznámka: S tímto přístupem můžete použijte operátory rovnosti!

Podívejme se na příklad:

function compareDates(d1, d2){
    const date1 = new Date(d1);
    const date2 = new Date(d2);

    if(date1.getTime() > date2.getTime()){
        console.log(`${d1} is greater than ${d2} in terms of milliseconds`)
    } else if(date1.getYear() < date2.getYear()){
        console.log(`${d2} is greater than ${d1} in terms of years`)
    } else if(date1.getDate() === date2.getDate()){
        console.log(`Both dates are equal`)
    }
}

compareDates("9/10/1997", "9/10/2000")
compareDates("11/11/2021", "11/1/2021")

Výsledkem je:

9/10/2000 is greater than 09/10/1997 in terms of years
11/11/2021 is greater than 11/1/2021 in terms of milliseconds

Nicméně, protože pracujeme s if a if-else bloky, některé příkazy se nikdy neprovedou. Například 9/10/1997 a 9/10/2000 mají stejné datum , 9/10 , i když ne ve stejném roce.

Zdarma e-kniha:Git Essentials

Prohlédněte si našeho praktického průvodce učením Git s osvědčenými postupy, průmyslově uznávanými standardy a přiloženým cheat sheetem. Přestaňte používat příkazy Google Git a skutečně se naučte to!

Například tento kód:

function compareDates(d1, d2){
    const date1 = new Date(d1);
    const date2 = new Date(d2);
    
    if(date1.getDate() === date2.getDate()){
        console.log(`Both dates are equal`)
    }
}

compareDates("09/10/1997", "9/10/2000")

Výsledkem by bylo:

Both dates are equal

Protože jen porovnáváme datum, aniž bychom mysleli na rok.

Závěr

V tomto článku jsme stručně probrali, jak JavaScript zpracovává data pomocí Date objektů. Poté jsme se zabývali tím, jak porovnávat data v JavaScriptu, přičemž máme na paměti několik užitečných metod.