4

我正在将日期与以下内容进行比较:

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?

4

3 回答 3

8

以下代码应该可以解决您的问题:

(myDate.getTime() == myOtherDate.getTime())

问题是当你写:

(myDate == myOtherDate)

...您实际上是在问“指向的是myDate指向同一个对象myOtherDate吗?”,而不是“myDate与 相同myOtherDate?”。

解决方案是使用getTime获取表示 Date 对象的数字(并且由于getTime返回自纪元时间以来的毫秒数,因此该数字将是 Date 对象的精确表示),然后使用该数字进行比较(比较数字将起作用正如预期的那样)。

于 2009-07-18T00:02:59.923 回答
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 循环代码(由“延迟代码 -start”标识),控制台将显示“false”,如果您删除 for 循环代码,控制台将记录“true”,即使在这两种情况下 myDate 都是 7/17 /2009 和“现在”是 2009 年 7 月 17 日。

问题在于 JavaScript date 对象同时存储了 date和 time。如果只想比较日期部分,就得写代码了。

function areDatesEqual(date1, date2)
{
    return date1.getFullYear() == date2.getFullYear() 
            && date1.getMonth() == date2.getMonth()
            && date1.getDate() == date2.getDate();
}

如果两个javascript“日期部分”相等,则此函数将打印“真”,而忽略相关的时间部分。

于 2009-07-18T00:22:35.523 回答
0
=> (myDate.getTime() == myOtherDate.getTime())

(myDate == myOtherDate)不起作用,它比较两个对象(指针)而不是它们包含的值。使用 getTime 获取 Date 的整数表示,然后进行比较。

于 2013-03-01T10:01:46.810 回答