日期减去30天错误

时间:2014-04-04 12:50:21

标签: javascript date

我正在使用此功能,将今天的日期与过期日期进行比较。输入:expireStamp是一个以毫秒为单位的时间戳。

compDate = function(expireStamp) {
    // expireStamp is a timestamp, convert it
    var expireDate = new Date(expireStamp);
    var notifyDate = new Date().setDate(expireDate.getDate() - 30);
    var today = new Date(); // today

    console.log("Today: " + today);
    console.log("Notify: " + new Date(notifyDate));
    console.log("Expire: " + expireDate);

    if(today.getTime() <= notifyDate) {
        // date is still good
        return "good";
    } else {
        // date may be expired
        if(today.getTime() > notifyDate && today.getTime() <= expireDate.getTime()) {
            // date soon to expire
            return "soon";
        } else if(today.getTime() > expireDate.getTime()){
            // date has expired
            return "fail";
        }
    }
}

今天有2个日期可以查看过期日期,过期日期和过期日期前30天的通知日期。我遇到的问题是通知日期。如果我将来的过期日期设置得太远,通知日期就会很奇怪。以下是一些示例测试:

> var exp = new Date(1409362782000)
undefined
> exp
Fri Aug 29 2014 21:39:42 GMT-0400 (Eastern Daylight Time)
> var notify = new Date().setDate(exp.getDate() - 30);
undefined
> notify
1396183229815
> var test = new Date(notify);
undefined
> test
Sun Mar 30 2014 08:40:29 GMT-0400 (Eastern Daylight Time)

因此,我将过期日期设置为8月29日(今天是2014年4月4日),使用时间戳(以毫秒为单位)。这在未来相当多。如您所见,exp是正确的。

通知日期应该是30天之前,但通知是3月30日,我确信是在8月29日之前超过30天。日期接近今天,这很好。

我需要通知日期为到期日前30天

1 个答案:

答案 0 :(得分:2)

> exp = new Date(1409362782000)
Sat Aug 30 2014 05:39:42 GMT+0400 (MSK)
> notify = new Date(exp.getTime() - (30 * 24 * 60 * 60 * 1000))
Thu Jul 31 2014 05:39:42 GMT+0400 (MSK)