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