【问题标题】:Comparing two dates using JavaScript not working as expected [duplicate]使用 JavaScript 比较两个日期未按预期工作 [重复]
【发布时间】:2011-06-15 00:27:11
【问题描述】:

这是我的 javascript 代码:

var prevDate = new Date('1/25/2011'); // the string contains a date which
                                      // comes from a server-side script
                                      // may/may not be the same as current date

var currDate = new Date();            // this variable contains current date
    currDate.setHours(0, 0, 0, 0);    // the time portion is zeroed-out

console.log(prevDate);                // Tue Jan 25 2011 00:00:00 GMT+0500 (West Asia Standard Time)
console.log(currDate);                // Tue Jan 25 2011 00:00:00 GMT+0500 (West Asia Standard Time)
console.log(prevDate == currDate);    // false -- why oh why

请注意,两个日期相同,但使用== 比较表明它们不相同。为什么?

【问题讨论】:

    标签: javascript datetime date comparison


    【解决方案1】:

    我认为您不能使用== 来比较 JavaScript 中的日期。这是因为它们是两个不同的对象,所以它们不是“对象相等的”。 JavaScript 允许您使用 == 比较字符串和数字,但所有其他类型都作为对象进行比较。

    即:

    var foo = "asdf";
    var bar = "asdf";
    console.log(foo == bar); //prints true
    
    foo = new Date();
    bar = new Date(foo);
    console.log(foo == bar); //prints false
    
    foo = bar;
    console.log(foo == bar); //prints true
    

    但是,您可以使用getTime 方法获取可比较的数值:

    foo = new Date();
    bar = new Date(foo);
    console.log(foo.getTime() == bar.getTime()); //prints true
    
    【解决方案2】:

    不要使用 == 运算符直接比较对象,因为 == 只有当两个比较变量都指向同一个对象时才会返回 true,首先使用 object valueOf() 函数获取对象值然后比较它们 即

    var prevDate = new Date('1/25/2011');
    var currDate = new Date('1/25/2011');
    console.log(prevDate == currDate ); //print false
    currDate = prevDate;
    console.log(prevDate == currDate ); //print true
    var currDate = new Date(); //this contain current date i.e 1/25/2011
    currDate.setHours(0, 0, 0, 0);
    console.log(prevDate == currDate); //print false
    console.log(prevDate.valueOf() == currDate.valueOf()); //print true
    

    【讨论】:

      【解决方案3】:

      尝试使用日期方法valueOf() 比较它们。这将比较它们下面的原始值,而不是比较日期对象本身。

      示例: console.log(prevDate.valueOf() == currDate.valueOf()); //Should be true

      【讨论】:

        【解决方案4】:
        console.log(prevDate.getTime() === currDate.getTime());
        

        (正如 nss 正确指出的那样,我现在看到了) 为什么我在这里使用 === ?看看Which equals operator (== vs ===) should be used in JavaScript comparisons?

        【讨论】:

          【解决方案5】:

          JS 使用 >< 运算符比较日期。如果比较返回 false,则它们相等。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-03-04
            • 2019-11-27
            • 1970-01-01
            • 1970-01-01
            • 2011-08-09
            • 1970-01-01
            相关资源
            最近更新 更多