如何在JavaScript中比较日期

142 阅读2分钟

日期是开发人员在创建真实世界的应用程序时最常用的数据类型之一。

但通常情况下,开发者会对这种数据类型感到纠结,最终使用Moment.js这样的日期库来完成简单的任务,而这些任务并不值得安装整个软件包所带来的大包容量。

在这篇文章中,我们将学习如何在JavaScript中进行日期比较。如果你需要快速的代码,这里就是:

const compareDates = (d1, d2) => {
  let date1 = new Date(d1).getTime();
  let date2 = new Date(d2).getTime();

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

compareDates("06/21/2022", "07/28/2021");
compareDates("01/01/2001", "01/01/2001");
compareDates("11/01/2021", "02/01/2022");

这将返回:

"06/21/2022 is greater than 07/28/2021"
"Both dates are equal"
"11/01/2021 is less than 02/01/2022"

当我们想到JavaScript中的日期比较时,我们会想到使用Date对象(Date()),当然,这也是可行的。

日期对象允许我们使用>,<,=, 或>= 比较运算符进行比较,但不能使用平等比较运算符,如==,!=,===, 和!== (除非我们把日期方法附加到日期对象上)。

让我们开始学习如何只使用date对象进行比较,然后我们将看到如何使用date对象和date方法进行平等比较。

如何在JavaScript中用日期对象进行日期比较

假设我们想在JavaScript中比较两个日期。我们可以很容易地使用日期对象(Date())这种方式:

let date1 = new Date();
let date2 = new Date();

if (date1 > date2) {
  console.log("Date 1 is greater than Date 2");
} else if (date1 < date2) {
  console.log("Date 1 is less than Date 2");
} else {
  console.log("Both Dates are same");
}

上面将返回两个日期是相同的,因为我们没有传递不同的日期:

"Both Dates are same"

现在让我们传入不同的日期值:

let date1 = new Date();
let date2 = new Date("6/01/2022");

if (date1 > date2) {
  console.log("Date 1 is greater than Date 2");
} else if (date1 < date2) {
  console.log("Date 1 is less than Date 2");
} else {
  console.log("Both Dates are same");
}

现在,这将返回以下结果:

"Date 1 is greater than Date 2"

幸运的是,当前两个条件失败时,上面将平等作为最后的选择来处理。但是假设我们试图这样处理平等作为条件:

let date1 = new Date();
let date2 = new Date();

if (date1 === date2) {
  console.log("Both Dates are same");
} else {
  console.log("Not the same");
}

它将返回以下结果,这是错误的:

"Not the same"

如何用JavaScript进行等值比较

为了处理平等性比较,我们在使用日期对象的同时,还使用了getTime() date方法,该方法返回毫秒数。但如果我们想比较具体的信息,如日、月等,我们可以使用其他的日期方法,如getDate()getHours()getDay()getMonth()getYear() :

let date1 = new Date();
let date2 = new Date();

if (date1.getTime() === date2.getTime()) {
  console.log("Both  are equal");
} else {
  console.log("Not equal");
}

这将返回:

"Both are equal"

我们可以将不同的日期传入日期对象,以便进行比较:

let date1 = new Date("12/01/2021");
let date2 = new Date("09/06/2022");

if (date1.getTime() === date2.getTime()) {
  console.log("Both  are equal");
} else {
  console.log("Not equal");
}

正如预期的那样,这将返回:

"Not equal"

注意:通过getTime() 方法,我们可以使用所有的比较运算符进行所有形式的日期比较,这些运算符是:>,<,<=,>=,==,!=,===, 和!==

如何进行特定日期的比较

假设我们想比较特定的日期值,如年份。那么我们可以使用.getYear() 日期方法这种方式:

let date1 = new Date("06/21/2022").getYear();
let date2 = new Date("07/28/2021").getYear();

if (date1 < date2) {
  console.log("Date1 is less than Date2 in terms of year");
} else if (date1 > date2) {
  console.log("Date1 is greater than Date2 in terms of year");
} else {
  console.log(`Both years are equal`);
}

结语

在这篇文章中,你已经学会了如何在JavaScript中使用date对象进行日期比较,而不需要安装任何库。

编码愉快!