如何在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