Как сравнивать даты в JavaScript

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

Вступление

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

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

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

Объект Date в JavaScript

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

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

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

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

Несмотря на то, что эта реализация кажется немного упрощенной, добавление Date было значительным улучшением, поскольку, наконец, появился уровень абстракции между разработчиками и необработанными датами.

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

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

Мы можем использовать операторы сравнения, такие как < и > two, сравнивают два 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, помня о некоторых полезных методах.

comments powered by Disqus