关于datetime:使用JavaScript按预期方式比较两个日期

Comparing two dates using JavaScript not working as expected

本问题已经有最佳答案,请猛点这里访问。

这是我的javascript代码:

1
2
3
4
5
6
7
8
9
10
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中的日期。这是因为它们是两个不同的对象,所以它们不是"对象相等"。javascript允许您使用==比较字符串和数字,但所有其他类型都作为对象进行比较。

即:

1
2
3
4
5
6
7
8
9
10
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方法获得可比较的数值:

1
2
3
foo = new Date();
bar = new Date(foo);
console.log(foo.getTime() == bar.getTime()); //prints true


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

1
2
3
4
5
6
7
8
9
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


1
console.log(prevDate.getTime() === currDate.getTime());

(正如NSS正确指出的那样,我现在明白了)为什么我用==这里?在JavaScript比较中使用等于运算符(==vs===)的查找吗?


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

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


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