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上读过一篇关于类似问题的文章,一个家伙说日期对象可以和其他任何对象进行比较,我发现任何其他的例子都会进行一种比较,而不是完全相等,所以我无法解释为什么我做的不对。
感谢你们两个,以及其他贴出类似答案的人。
当你使用
但当你使用
是一些例子: </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 >
收益法的
编辑:固定码 </P >
这是一个多illogical方院的JavaScript。你可以工作的全面这个问题村转换日期到一个号码,用
1 | if (a.getTime() === b.getTime()) ... |
在《
PS:不要使用
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; } |