使用Date对象比较天数而不改变它们

时间:2018-05-15 10:28:05

标签: javascript performance date

我需要比较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;
}

有没有更有效的方法来做到这一点,而不使用外部库?

2 个答案:

答案 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;
}