比较javascript日期

时间:2009-07-18 00:01:27

标签: javascript date-comparison

我正在将日期与这样的事情进行比较:

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?

3 个答案:

答案 0 :(得分:8)

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

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

问题是当你写:

(myDate == myOtherDate)

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

解决方案是使用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的整数表示,然后进行比较。