2011-01-03 11 views
51

Muszę się dowiedzieć, czy dwie daty wybrane przez użytkownika są takie same w JavaScript. Daty są przekazywane do tej funkcji w łańcuchu ("xx/xx/xxxx"). To wszystko, czego potrzebuję.Ustalanie daty równości w JavaScript

Oto mój kod:

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

javascript alert po zmianie daty na obiektach wygląda następująco:

Wto 25 stycznia 2011 00:00:00 GMT-0800 (Pacific Standard Time)

Wto 25 stycznia 2011 00:00:00 GMT-0800 (Pacific standard Time)

badanie w celu ustalenia, czy data 1 jest większa niż data 2 działa. Ale używanie operatorów == lub === nie zmienia poprawności na fałsz.

+3

Czy można sprawdzić ten post out: http://stackoverflow.com/questions/338463/how-do-i-do-a-date-comparison-in-javascript. Czy to pomaga? – JohnMerlino

+0

Kusiło mnie, by oznaczyć to jako duplikat, ale myślę, że to drobny przypadek tego samego problemu, więc nie jestem. – Liam

+0

To nie jest duplikat. Wspomniany post (i zaakceptowana odpowiedź) dotyczą ustalenia, czy data jest przed czy po innej, a nie o równości. – yannick1976

Odpowiedz

97

Użyj metody getTime(). Sprawdza wartość liczbową daty i będzie działać zarówno dla kontroli większych niż/mniejszych, jak i dla kontroli równych.

EDIT:

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

I pytanie stackoverflow, które napisałem powyżej, pokazuje przykład. Pytania były identyczne. – JohnMerlino

+0

Tak, użycie metody getTime() rozwiązuje ten błąd. Dziękuję Ci. – Jarred

+8

Prostszy sposób: 'if (+ d1 == + d2)' – GetFree

15

Jeśli nie chcesz, aby zadzwonić getTime() prostu spróbuj tego:

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

+14

WTF? Dlaczego to działa, ale operator równości nie? Gdzie jest sens? – Towa

+7

Operator równości sprawdza pod kątem równości referencyjnej. Oznacza to, że zwraca on tylko wartość true, jeśli dwie zmienne odnoszą się do tego samego obiektu. Jeśli utworzysz dwa obiekty Date ('var a = new Date(); var b = new Date();'), nigdy nie będą one równe. – Tomas

+0

Czy to nie jest błąd JS, czy jest to ograniczenie operatora równości i przeciążenia? –

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

użyć dwóch prostych sposobów, by sprawdzić równość

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