validaciones son mayor ingresar iguales fechas fecha dias comparar como javascript

mayor - Las comparaciones de fechas de JavaScript no son iguales



ingresar fecha javascript (5)

Esta pregunta ya tiene una respuesta aquí:

He intentado buscar personas con preguntas similares, pero no he encontrado nada.

Tengo dos fechas en JavaScript, ambas configuradas en el mismo valor ... La prueba de igualdad falla en ==, pero> = y <= evalúa verdadero

A continuación se muestra el código que tengo en juego:

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

¿Alguien ha encontrado algo como esto, o estoy haciendo algo fundamentalmente mal?

He probado que esto es Internet Explorer (9), Firefox 5+ y Chrome.

Actualizar:

Así que dos personas publicaron excelentes respuestas a mi problema y les agradezco a ambos: xdazz y DaveRandom. Había leído una publicación anterior en stackoverflow.com en una pregunta similar y un tipo dijo que los objetos de fecha podrían compararse como cualquier otro, y cualquier otro ejemplo que encontré siempre hizo un tipo de comparación, nunca una igualdad total, así que No pude hacer la conexión de por qué lo estaba haciendo mal.

Gracias a ustedes dos, y a los otros que publicaron respuestas similares.


Creo que si lo haces

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

En la parte superior del script encontrará que funciona.

El método getTime() devuelve la fecha como un entero, lo que está haciendo allí es comparar objetos, en lugar de valores específicos.

EDITAR Fija el código anterior


Cuando usa <= o >= para comparar dos objetos de fecha, se comparan a través de valueOf , que es lo mismo que getTime para Date.

Pero cuando usas == , son dos objetos diferentes del mismo tipo, por lo que devuelve falso.

Agregué algunos ejemplos:

> 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


Esta es una de las muchas partes ilógicas de Javascript. Puede solucionar este problema convirtiendo la fecha en un número usando .getTime() que devolverá la cantidad de milisegundos transcurridos desde esa fecha y 00:00:00 del 1 de enero de 1970.

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

El operador === en los propios objetos devolverá siempre falso porque esos dos objetos son, de hecho, objetos de javascript mutables distintos.

PS: No use el operador == con Javascript. Siempre. Lo que hace lleva el término "loco" a un nivel completamente nuevo. Seriamente. El problema es que aplica todo tipo de conversiones de tipo que simplemente no tienen sentido y, por ejemplo, terminas con cosas como "1"==1 , x==false && (x?1:2)==1 o incluso a==b && b==c && a!=c es verdadero (por ejemplo, con x=[] o con a=[1], b=1, c=[[1]] ). Simplemente no uses == . Siempre. Es "FUBAR". Fullstop.


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>