Вступление
Даты – очень распространенный тип данных, с которым работают разработчики. От временных меток определенных действий до отчетов, функций регистрации и ограниченного доступа в системах, требующих подписки, – нам часто приходится сравнивать даты.
То есть, мы сравниваем, после или до какой-либо даты, является ли дата сегодняшней, сколько дней между датами и т.д.
В этой статье мы рассмотрим, как сравнить две даты в 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/”