假设我们在Javascript中有2个Date对象;
var d1 = new Date('...');
var d2 = new Date('...');
我们进行比较:
d1 < d2;
此比较将始终考虑小时,分钟,秒。
我希望它只考虑年份,月份和日期进行比较。
最简单的方法是什么?
允许使用jQuery。
答案 0 :(得分:8)
重置hours
,minutes
,seconds
和milliseconds
:
var d1 = new Date();
d1.setHours(0);
d1.setMinutes(0);
d1.setSeconds(0);
d1.setMilliseconds(0);
或者使用setHours
,这不是那么详细:
var d1= new Date();
d1.setHours(0, 0, 0, 0);
最后,要比较生成的Date
是否相同使用getTime()
:
d1.getTime() == d2.getTime()
答案 1 :(得分:2)
作为一种代数解决方案,你可以运行一些数学运算:
function sameDay(d1, d2) {
return d1 - d1 % 86400000 == d2 - d2 % 86400000
}
这个等式实际上分解为:
function sameDay(d1, d2) {
var d1HMS, //hours, minutes, seconds & milliseconds
d2HMS,
d1Day,
d2Day,
result;
//d1 and d2 will be implicitly cast to Number objects
//this is to be explicit
d1 = +d1;
d2 = +d2;
//1000 milliseconds in a second
//60 seconds in a minute
//60 minutes in an hour
//24 hours in a day
//modulus used to find remainder of hours, minutes, seconds, and milliseconds
//after being divided into days
d1HMS = d1 % (1000 * 60 * 60 * 24);
d2HMS = d2 % (1000 * 60 * 60 * 24);
//remove the remainder to find the timestamp for midnight of that day
d1Day = d1 - d1HMS;
d2Day = d2 - d2HMS;
//compare the results
result = d1Day == d2Day;
return result;
}
这样做的好处是不会丢失原始Date
对象的数据,因为setHours
等会修改引用的对象。
或者,使用sameDay
的安全setHours
函数可写为:
function sameDay(d1, d2) {
var a,
b;
a = new Date(+d1);
b = new Date(+d2);
a.setHours(0, 0, 0, 0);
b.setHours(0, 0, 0, 0);
return +a == +b;
}
答案 2 :(得分:1)
您可以为每个日期手动将小时,分钟和秒设置为0:
var d1 = new Date('...');
d1.setHours(0);
d1.setMinutes(0);
d1.setSeconds(0);
var d2 = new Date('...');
d2.setHours(0);
d2.setMinutes(0);
d2.setSeconds(0);
答案 3 :(得分:0)
我会将Date对象转换为ISO日期格式("2012-09-20"
),可以按字典顺序对比为字符串:
function compareDates(d1, d2) {
var isoDate1 = d1.toISOString().substr(0, 10)
, isoDate2 = d2.toISOString().substr(0, 10);
return isoDate1.localeCompare(isoDate2);
}
compareDates(new Date("2010-01-01"), new Date("2010-01-01")); // => 0
compareDates(new Date("2010-01-01"), new Date("2012-01-01")); // => -1
compareDates(new Date("2012-01-01"), new Date("2010-01-01")); // => 1