JavaScriptdate比较不等于

我试过寻找有类似问题的人,但没有find任何东西。

我在JavaScript中有两个date,都设置为相同的值…平等testing失败==,但> =和<=评估真实。

以下是我在使用的代码:

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 ); 

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

我testing了这个是Internet Explorer(9),Firefox 5 +和Chrome。

更新:

所以两个人对我的问题发布了很好的答案,我感谢你们俩:xdazz和DaveRandom。 我已经阅读了一个类似的问题stackoverflow.com上的一个post,一个家伙说,date对象可以像任何其他的比较,和我发现任何其他例子总是做一个或types的比较,从来没有一个完整的平等,所以我不能说出为什么我做错了。

感谢你们两位,以及其他发表类似答案的人。

当使用<=>=比较两个date对象时,它们通过valueOf进行比较,这与Date的getTime相同。

但是当你使用== ,它们是同一types的两个不同的对象,所以它返回false。

增加了一些例子:

 > 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 

我想如果你这样做

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

在脚本的顶部,你会发现它的工作原理。

getTime()方法返回一个整数的date,你在做的是比较对象,而不是具体的值。

编辑修正了上面的代码

这是Javascript的许多不合逻辑的部分之一。 您可以通过使用.getTime()将date转换为数字来解决此问题,该date将返回从1970年1月1日00:00:00起经过的毫秒数。

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

对象本身的===运算符将始终返回false,因为这两个对象确实是不同的可变JavaScript对象。

PS:不要在Javascript中使用==运算符。 永远。 它把“疯狂”这个词带到了一个全新的高度。 认真。 问题是,各种types的转换,只是没有任何意义,例如,你最终得到像"1"==1x==false && (x?1:2)==1或甚至a==b && b==c && a!=c为真(例如, x=[]或者a=[1], b=1, c=[[1]] )。 只是不要使用== 。 永远。 这是“FUBAR”。 句号。

 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 />'); 
 <Script> 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; } </Script>