Рубрики
Без рубрики

Сравнение двух дат в JavaScript

В этом руководстве мы рассмотрим, как сравнивать даты в ванильном JavaScript, используя встроенные методы и операторы, с примерами.

Вступление

Даты – очень распространенный тип данных, с которым работают разработчики. От временных меток определенных действий до отчетов, функций регистрации и ограниченного доступа в системах, требующих подписки, – нам часто приходится сравнивать даты.

То есть, мы сравниваем, после или до какой-либо даты, является ли дата сегодняшней, сколько дней между датами и т.д.

В этой статье мы рассмотрим, как сравнить две даты в JavaScript, что поможет нам определить, находится ли дата до или после другой.

Объект даты в JavaScript

Веб-разработчики обычно используют внешние пакеты (например, Moment.js) для обработки операций с датой. Но по мере развития современного Интернета в JavaScript появился новый конструктор объектов под названием Date для обработки операций с датой и временем.

Это означает, что вам не нужна внешняя библиотека для выполнения элементарных проверок и операций, что упрощает их выполнение в Vanilla JS.

Класс Date очень прост для понимания – он просто хранит время Unix, измеряемое в миллисекундах.

Время Unix измеряется как количество секунд, прошедших с эпохи Unix (00:00:00 UTC 1 января 1970 года), которая является совершенно произвольной датой.
Даже если эта реализация кажется немного упрощенной, добавление класса Date было довольно большим улучшением, поскольку наконец-то появился уровень абстракции между разработчиками и необработанными датами.

Теперь давайте рассмотрим различные способы сравнения двух дат с помощью объектов Date.

Сравнение двух дат в JavaScript

Мы можем использовать операторы сравнения < и > для сравнения двух объектов Date, при этом под капотом происходит эффективное сравнение их счетчиков времени. Вы эффективно сравниваете два целочисленных счетчика:

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")

Это приводит к:

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

Как мы видим, сравнение дат сводится к преобразованию предоставленных строк в объекты Date и их сравнению с помощью соответствующего оператора сравнения.

Примечание: Операторы равенства (== и ===) не работают с объектами Date, поэтому мы не проверяем, одинаковы ли они.

Другой способ сравнения двух дат – использование встроенного метода getTime().

Метод getTime() возвращает количество миллисекунд, прошедших с момента эпохи Unix. Кроме того, для дальнейшего уточнения и сравнения информации можно использовать методы getDate(), getHours(), getDay(), getMonth() и getYear(), а также другие аналогичные методы.

Кроме того, можно также использовать методы getUTCDay(), getUTCDate(), getUTCHour(), getUTCMinute() и т.д., которые возвращают заданные временные идентификаторы, привязанные к UTC.

Примечание: При таком подходе вы можете использовать операторы равенства!

Давайте рассмотрим пример:

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")

Это приводит к:

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

Хотя, поскольку мы работаем с блоками if и if-else, некоторые утверждения никогда не выполняются. Например, 9/10/1997 и 9/10/2000 имеют одну и ту же дату, 9/10, но не один и тот же год.

Например, этот код:

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")

Приведет к:

Both dates are equal

Поскольку мы сравниваем только дату, без учета года.

Заключение

В этой статье мы кратко рассмотрели, как JavaScript работает с датами, используя объекты Date. Затем мы рассмотрели, как сравнивать даты в JavaScript, не забывая о некоторых полезных методах.

Оригинал: “https://stackabuse.com/compare-two-dates-in-javascript/”