Pregunta

Estoy comparando fechas con algo como esto:

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 ) {
    ....
}

Los valores de las cadenas son dinámicos, por supuesto.

En los registros veo:

dt(Fri Jul 17 2009 18:36:56 GMT-0500 (CST)) == date(Fri Jul 17 2009 18:36:56 GMT-0500 (CST) == (false)

Intenté .equals() pero no funcionó (estaba probando la parte Java de JavaScript :P)

¿Cómo puedo comparar estas fechas para que sean verdaderas?

¿Fue útil?

Solución

El siguiente código debería resolver su problema:

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

El problema es que cuando escribes:

(myDate == myOtherDate)

... en realidad estás preguntando "¿Es myDate apuntando al mismo objeto que myOtherDate está señalando?", no "¿Está myDate idéntico a myOtherDate?".

La solución es utilizar getTime para obtener un número que represente el objeto Fecha (y desde getTime devuelve el número de milisegundos desde la época, este número será un exacto representación del objeto Fecha) y luego use este número para la comparación (la comparación de números funcionará como se esperaba).

esteban

Otros consejos

El problema con el código es que usted está comparando la hora / fecha parte en lugar de sólo la fecha.

Prueba este código:

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

Si se mantiene el código de bucle (identificado por 'código de retardo -start'), la consola mostrará 'falso' y si se quita el código de bucle, la consola registrará 'verdadero' a pesar de que en los dos casos es myDate 7/17/2009 y 'ahora' es 7/17/2009.

El problema es que las tiendas de JavaScript fecha objeto al mismo tiempo la fecha y el tiempo . Si sólo desea comparar la parte de fecha, usted tiene que escribir el código.

function areDatesEqual(date1, date2)
{
    return date1.getFullYear() == date2.getFullYear() 
            && date1.getMonth() == date2.getMonth()
            && date1.getDate() == date2.getDate();
}

Esta función se imprimirá 'verdadero' si los dos javascript 'fecha de parte' es igual ignorando la parte de tiempo asociado.

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

(myDate == myOtherDate) no funciona, se comparan los dos objetos (punteros) en lugar del valor que contienen. Utilice getTime para obtener representación entera de la fecha y luego comparar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top