Skip to content

如何在JavaScript中比较两个日期?

在JavaScript中比较Date对象经常会让人感到困惑。相等性并不像你想象的那么简单,你可能需要考虑时区,而且日期也可以像数字一样运算。这些都是需要理解的内容,所以让我们详细看看每个用例。

日期相等性比较

使用等号运算符(=====)比较两个日期是无效的,因为它是通过引用比较对象的。幸运的是,Date.prototype.toISOString()方法返回一个日期的字符串表示,采用了标准化格式,可以用来比较两个日期。

const isSameDate = (dateA, dateB) =>
  dateA.toISOString() === dateB.toISOString();

isSameDate(new Date('2020-10-20'), new Date('2020-10-20')); // true

日期在另一个日期之前

如前所述,Date对象可以像数字一样运算。这意味着你可以使用小于号运算符(<)来检查一个日期是否在另一个日期之前。

const isBeforeDate = (dateA, dateB) => dateA < dateB;

isBeforeDate(new Date('2020-10-20'), new Date('2020-10-21')); // true

日期在另一个日期之后

类似地,您可以使用大于运算符(>)来检查一个日期是否在另一个日期之后。

const isAfterDate = (dateA, dateB) => dateA > dateB;

isAfterDate(new Date('2020-10-21'), new Date('2020-10-20')); // true

日期在两个日期之间

结合前面的两个代码片段,您可以检查一个日期是否在另外两个日期之间。

const isBetweenDates = (dateStart, dateEnd, date) =>
  date > dateStart && date < dateEnd;

isBetweenDates(
  new Date('2020-10-20'),
  new Date('2020-10-30'),
  new Date('2020-10-19')
); // false
isBetweenDates(
  new Date('2020-10-20'),
  new Date('2020-10-30'),
  new Date('2020-10-25')
); // true