比较日期问题 - javascript

时间:2014-07-28 10:15:41

标签: javascript date

我需要在javascript中比较日期。 经过多次尝试...... 我选择:

    var endDate = new Date(secondDate.getYear(), secondDate.getMonth(), secondDate.getDate(), 0, 0, 0,0);

    var startDate = new Date(firstDate.getYear(), firstDate.getMonth(), firstDate.getDate(), 0, 0, 0, 0);

    if (endDate.getTime() >= startDate.getTime()) {
        isValid = true;
    }
    else {
        isValid = false;
    }

在我的情况下:

--- startDate = Tue Apr 01 1997 00:00:00 GMT + 0200(耶路撒冷标准时间)(即01/04/1997)

--- endDate =星期四7月26日114 00:00:00 GMT + 0200(耶路撒冷标准时间)(即2014年7月26日)

你知道吗? startDate比endDate小,对吗?

可是:

--- endDate.getTime()返回: -58551904800000

--- startTime.getTime()返回: 859845600000

所以, endDate.getTime()> = startDate.getTime()返回false ...

在其他情况下,效果很好:

--- startDate:星期六7月21日114 00:00:00 GMT + 0200(耶路撒冷标准时间)(即2014年7月21日)

--- endDate:星期六7月28日114 00:00:00 GMT + 0200(耶路撒冷标准时间)(即2014年7月28日)

--- startDate.getTime()返回 -58552336800000

--- endDate.getTime()返回 -58551732000000

所以, endDate.getTime()> = startDate.getTime()返回true ...

似乎javascript函数对2000年后的日期有另一种行为。

我该怎么办?哪些代码与所有可选情况相匹配?

感谢。

3 个答案:

答案 0 :(得分:0)

显然,您的结束日期有问题:

Thu Jul 26 114 00:00:00 GMT+0200

并不意味着2014年7月21日,而是 21/07/114

根据the doc,以下是创建日期的两种正确方法:

var endDate = new Date(21, 6, 2014);

// Or a string corresponding to a version of ISO8601
var endDate = new Date('2014-07-21T00:00:00z+3');

答案 1 :(得分:0)

是的,就像ghusse说的那样,你的结束时间有一个问题,如果你修复它,所以它是2014年你会得到一个结果,如1406329200000而不是-58551904800000

答案 2 :(得分:0)

在我阅读了Josh和ghusse的答案和建议之后,我找到了一个解决方案:

使用getFullYear(),而不是getYear(),所有都可以使用O.K。