【问题标题】:Compare dates issue - javascript比较日期问题 - javascript
【发布时间】:2014-07-28 10:15:40
【问题描述】:

我需要在 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 = 1997 年 4 月 1 日星期二 00:00:00 GMT+0200(耶路撒冷标准时间)(即 1997 年 1 月 4 日)

---endDate = Thu Jul 26 114 00:00:00 GMT+0200(耶路撒冷标准时间)(即 26/07/2014)

你看到了吗? startDate 比 endDate 小,对吧?

但是:

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

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

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

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

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

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

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

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

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

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

我该怎么办?哪个代码将匹配所有可选情况?

谢谢。

【问题讨论】:

    标签: javascript date


    【解决方案1】:

    是的,就像 ghusse 说的,如果您修复了结束时间,那么您的结束时间会出现问题,所以它是 2014 年,您会得到诸如 1406329200000 而不是 -58551904800000 之类的结果

    【讨论】:

      【解决方案2】:

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

      使用 getFullYear(),而不是 getYear(),一切正常

      【讨论】:

        【解决方案3】:

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

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

        不是指 21/07/2014 而是 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');
        

        【讨论】:

        • 哈哈。我不明白为什么第一次约会可以,但第二次约会不行。 getUTCFullYear 大概可以解决这个问题)
        • 这是javascript行为!在 javascript 中,new Date('Sat Jul 26 2014 00:00:00 GMT+0300 (Jerusalem Daylight Time)').getYear() - 返回 114。为什么?为什么不返回 2014 年???
        • 答案已编辑。 javascript 中的 Date 构造函数并非支持所有字符串格式。
        猜你喜欢
        • 1970-01-01
        • 2011-07-10
        • 1970-01-01
        • 1970-01-01
        • 2014-04-01
        • 1970-01-01
        • 2021-11-03
        • 2011-07-30
        • 1970-01-01
        相关资源
        最近更新 更多