2011-01-03 19 views
51

Necesito averiguar si dos fechas que el usuario selecciona son las mismas en Javascript. Las fechas se pasan a esta función en una cadena ("xx/xx/xxxx"). Esa es toda la granularidad que necesito.Determinación de la igualdad de fecha en Javascript

Aquí está mi código:

 var valid = true; 
    var d1 = new Date($('#datein').val()); 
    var d2 = new Date($('#dateout').val()); 
    alert(d1+"\n"+d2); 
    if(d1 > d2) { 
     alert("Your check out date must be after your check in date."); 
     valid = false; 
    } else if(d1 == d2) { 
     alert("You cannot check out on the same day you check in."); 
     valid = false; 
    } 

La alerta Javascript después de convertir las fechas para los objetos se ve así:

mar 25 Ene 2011 00:00:00 GMT-0800 (hora estándar del Pacífico)

Mar Ene 25 de 2011 00:00:00 GMT-0800 (hora estándar del Pacífico)

la prueba para determinar si la fecha es mayor que 1 día 2 obras. Pero el uso de los operadores == o === no cambia de válido a falso.

+3

Ha comprobado a cabo este post: http://stackoverflow.com/questions/338463/how-do-i-do-a-date-comparison-in-javascript. ¿Ayuda? – JohnMerlino

+0

Tentado a marcar esto como un duplicado, pero creo que este es un caso marginal del mismo problema, entonces no lo soy. – Liam

+0

Esto no es un duplicado. La publicación mencionada (y la respuesta aceptada) trata de determinar si una fecha es anterior o posterior a otra, no sobre la igualdad. – yannick1976

Respuesta

97

Utilice el método getTime(). Verificará el valor numérico de la fecha y funcionará tanto para las comprobaciones mayores que/menores que para las verificaciones iguales.

EDIT:

if (d1.getTime() == d2.getTime()) 
+1

Y la pregunta de stackoverflow que publiqué arriba muestra un ejemplo. Las preguntas fueron idénticas. – JohnMerlino

+0

Sí, el método getTime() corrige este error. Gracias. – Jarred

+8

Una manera más simple: 'if (+ d1 == + d2)' – GetFree

15

Si no desea llamar getTime() sólo intentar esto:

(a >= b && a <= b)

+14

WTF? ¿Por qué funciona eso, pero el operador de igualdad no? ¿Dónde está el sentido en eso? – Towa

+7

El operador de igualdad comprueba la igualdad de referencia. Esto significa que solo devuelve verdadero si las dos variables refieren el mismo objeto. Si crea dos objetos Date ('var a = new Date(); var b = new Date();'), nunca serán iguales. – Tomas

+0

¿No es esto un error de JS o es una limitación del operador de igualdad y la capacidad de sobrecarga? –

1
var d1 = new Date($('#datein').val()); 
var d2 = new Date($('#dateout').val()); 

uso de dos formas sencillas para comprobar la igualdad

  1. if(d1.toString() === d2.toString())
  2. if(+d1 === +d2)
Cuestiones relacionadas