我需要比较Javascript中的两个日期,只考虑当天(即不是时间),但我不想改变原始日期对象。
我想出了:
_isDayGreaterOrEqualThan(date1, date2) {
const dayDate1 = new Date(date1).setHours(0,0,0,0);
const comparableDate1 = new Date(dayDate1).getTime();
const dayDate2 = new Date(date2).setHours(0,0,0,0);
const comparableDate2 = new Date(dayDate2).getTime();
return comparableDate1 >= comparableDate2;
}
有没有更有效的方法来做到这一点,而不使用外部库?
答案 0 :(得分:1)
这可能不是更有效,但更优雅:
Date.prototype.onlyDate = function () {
var d = new Date(this);
d.setHours(0, 0, 0, 0);
return d;
}
然后你可以问:
date1.onlyDate() > date2.onlyDate()
答案 1 :(得分:0)
您可以使用时间戳并将其截断为1000 * 60 * 60 * 24
的倍数,即以毫秒为单位的天数。
_isDayGreaterOrEqualThan(date1, date2) {
const comp1 = Math.trunc(date1.getTime() / (1000 * 60 * 60 * 24));
const comp2 = Math.trunc(date2.getTime() / (1000 * 60 * 60 * 24));
return comp1 >= comp2;
}
作为旁注:根据惯例,如果左参数小于右,比较器函数返回负数,如果右参数小于左,则返回正数,如果它们相等则返回0(这是例如Array.sort()
在将函数作为参数传递时使用的约定。所以你可能想要考虑一下:
_compareDay(date1, date2) {
const comp1 = Math.trunc(date1.getTime() / (1000 * 60 * 60 * 24));
const comp2 = Math.trunc(date2.getTime() / (1000 * 60 * 60 * 24));
return comp1 - comp2;
}