JavaScript日期比较不等于

JavaScript Date Comparisons Don't Equal

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

我试过寻找有类似问题的人,但没有发现任何问题。

我在javascript中有两个日期,都设置为相同的值…相等性测试在==上失败,但在>=和<=evaluate true上失败。

下面是我玩的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
var startDate = new Date( 2011, 7, 30, 0, 0, 0, 0 );

var dt = new Date( 2011, 7, 30, 0, 0, 0, 0 );

if( startDate == dt )
    document.write('They Equal<br />');

if( startDate > dt )
    document.write('Start Date is > dt<br />');

if( startDate >= dt )
    document.write('Start Date is >= dt<br />');

if( startDate < dt )
    document.write('Start Date is < dt<br />');

if( startDate <= dt )
    document.write('Start Date is <= dt<br />');

if( dt == startDate )
    document.write('They Equal<br />');

if( dt > startDate )
    document.write('dt > startDate<br />');

if( dt >= startDate )
    document.write('dt >= Start Date <br />');

if( dt < startDate )
    document.write('dt < Start Date <br />');

if( dt <= startDate )
    document.write('dt <= Start Date <br />');  

document.write( dt );
document.write( '<br />');
document.write( startDate );

有没有人遇到过这样的事情,或者我做了一些根本错误的事情?

我测试了这是Internet Explorer(9)、Firefox 5+和Chrome。

更新:

所以有两个人对我的问题给出了很好的答案,我感谢你们两个:xdazz和daverandom。我在stackoverflow.com上读过一篇关于类似问题的文章,一个家伙说日期对象可以和其他任何对象进行比较,我发现任何其他的例子都会进行一种比较,而不是完全相等,所以我无法解释为什么我做的不对。

感谢你们两个,以及其他贴出类似答案的人。


当你使用<=Compare to或>=双约会的对象,他们会通过valueOf相比,这是同一个AS getTime去约会。 </P >

但当你使用==,他们是两个不同的对象的同型的,所以剧情的错误信息。 </P >

是一些例子: </P >

1
2
3
4
5
6
7
8
> new Date(2011, 7, 30, 0, 0, 0, 0) == new Date( 2011, 7, 30, 0, 0, 0, 0 )
false
> new Date(2011, 7, 30, 0, 0, 0, 0).getTime() == new Date( 2011, 7, 30, 0, 0, 0, 0).getTime()
true
> new Date(2011, 7, 30, 0, 0, 0, 0).valueOf() == new Date( 2011, 7, 30, 0, 0, 0, 0).valueOf()
true
> new Date(2011, 7, 30, 0, 0, 0, 0).valueOf() == new Date( 2011, 7, 30, 0, 0, 0, 0).getTime()
true

我认为,如果你做的 </P >

1
2
var startDate = (new Date( 2011, 7, 30, 0, 0, 0, 0 )).getTime();
var dt = (new Date( 2011, 7, 30, 0, 0, 0, 0 )).getTime();

在Top of the script你会找到它的作品。 </P >

收益法的getTime()日期作为一整体,你在做什么有冰比较对象的值,比当前的特异性。 </P >

编辑:固定码 </P >


这是一个多illogical方院的JavaScript。你可以工作的全面这个问题村转换日期到一个号码,用.getTime()技术将返回多milliseconds通过虔诚的日期和时间00:00:00(1970年1月1日。 </P >

1
if (a.getTime() === b.getTime()) ...

在《===运算符将返回对象本身永远的福,因为两个对象是妈妈成不同的mutable JavaScript对象。 </P >

PS:不要使用==算子和JavaScript。的脸。什么是以信息技术术语的"疯狂"到一个全新的水平。认真对待。"这是所有问题的applies品种类型是简单的conversions丈夫没有意义(例如,你最终会与"1"==1x==false && (x?1:2)==1"状,或甚至a==b && b==c && a!=c真的存在(例如与x=[]或与a=[1], b=1, c=[[1]])。在不使用==。的脸。它的"苦差"。fullstop。 </P >


1
2
3
4
5
6
var startDate = new Date( 2011, 7, 30, 0, 0, 0, 0 );

var dt = new Date( 2011, 7, 30, 0, 0, 0, 0 );

if( startDate.getTime() == dt.getTime() )
    console.log('They Equal<br />');

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function checkval()
{
var strfromdate=document.frmadmin.txtfromdate.value;
strfromdate=strfromdate.split("/");
//alert(strfromdate[2]+""+strfromdate[0]+""+strfromdate[1]);

var strtodate=document.frmadmin.txttodate.value;
strtodate=strtodate.split("/");

var fromDate = (new Date( strfromdate[2], strfromdate[0], strfromdate[1], 0, 0, 0, 0 )).getTime();
var toDate = (new Date( strtodate[2], strtodate[0], strtodate[1], 0, 0, 0, 0 )).getTime();
//alert(fromDate+""+toDate);



    if(toDate<fromDate)
    {
        alert("To date should be greater than from date.");
        document.frmadmin.txttodate.focus();
        return false;
    }


    return true;
}