我正在将日期与这样的事情进行比较:
var dt = new Date();
dt.setDate("17");
dt.setMonth(06);
dt.setYear("2009");
var date = new Date();
console.log("dt(%s) == date(%s) == (%s)", dt, date, (dt == date) );
if( now == dt ) {
....
}
字符串值当然是动态的。
在日志中我看到:
dt(Fri Jul 17 2009 18:36:56 GMT-0500 (CST)) == date(Fri Jul 17 2009 18:36:56 GMT-0500 (CST) == (false)
我试过.equals()但它没有用(我正在尝试JavaScript的Java部分:P)
如何比较这些日期以便它们返回true?
答案 0 :(得分:8)
以下代码可以解决您的问题:
(myDate.getTime() == myOtherDate.getTime())
问题是当你写:
(myDate == myOtherDate)
...您实际上是在询问“myDate
是否指向myOtherDate
指向的同一个对象?”,而不是“myDate
与myOtherDate
相同” ?”。
解决方案是使用getTime
来获取表示Date对象的数字(并且因为getTime
返回自纪元时间以来的毫秒数,这个数字将是 exact Date对象的表示)然后使用此数字进行比较(比较数字将按预期工作)。
史蒂夫
答案 1 :(得分:3)
您的代码存在的问题是您要比较时间/日期部分而不仅仅是日期。
试试这段代码:
var myDate = new Date();
myDate.setDate(17);
myDate.setMonth(7);
myDate.setYear(2009);
//Delay code - start
var total = 0;
for(var i=0; i<10000;i++)
total += i;
//Delay code - end
var now = new Date();
console.log(now.getTime() == myDate.getTime());
如果保留for循环代码(由'Delay code -start'标识),控制台将显示'false',如果删除for循环代码,控制台将记录'true',即使在两种情况下myDate都是7/17/2009和'now'是7/17/2009。
问题是JavaScript日期对象存储日期和时间。如果您只想比较日期部分,则必须编写代码。
function areDatesEqual(date1, date2)
{
return date1.getFullYear() == date2.getFullYear()
&& date1.getMonth() == date2.getMonth()
&& date1.getDate() == date2.getDate();
}
如果两个javascript'日期部分'相等而忽略关联的时间部分,则此函数将打印'true'。
答案 2 :(得分:0)
=> (myDate.getTime() == myOtherDate.getTime())
(myDate == myOtherDate)
不起作用,它比较两个对象(指针)而不是它们包含的值。使用getTime获取Date的整数表示,然后进行比较。