Czy ktoś może zaproponować sposób na porównanie wartości dwóch dat większych niż, mniejszych niż, i nie w przeszłości przy użyciu JavaScript? Wartości będą pochodziły z pól tekstowych.
Obiekt Date zrobi to, co chcesz - skonstruuje jeden dla każdej daty, a następnie porówna je używając >
, <
, <=
lub >=
.
Operatory ==
, !=
, ==
i !==
wymagają użycia date.getTime()
jak w
var d1 = new Date();
var d2 = new Date(d1);
var same = d1.getTime() === d2.getTime();
var notSame = d1.getTime() !== d2.getTime();
aby być jasnym, sprawdzanie równości bezpośrednio z obiektami daty nie będzie'działać
var d1 = new Date();
var d2 = new Date(d1);
console.log(d1 == d2); // prints false (wrong!)
console.log(d1 === d2); // prints false (wrong!)
console.log(d1 != d2); // prints true (wrong!)
console.log(d1 !== d2); // prints true (wrong!)
console.log(d1.getTime() === d2.getTime()); // prints true (correct)
Sugeruję, abyś używał drop-downs lub innej podobnej ograniczonej formy wprowadzania daty zamiast pól tekstowych, abyś nie znalazł się w piekle walidacji danych wejściowych.
jaki format?
Jeśli skonstruujesz obiekt Javascript Date object, możesz po prostu odjąć je, aby uzyskać różnicę milisekund (edit: lub po prostu je porównać) :
js>t1 = new Date()
Thu Jan 29 2009 14:19:28 GMT-0500 (Eastern Standard Time)
js>t2 = new Date()
Thu Jan 29 2009 14:19:31 GMT-0500 (Eastern Standard Time)
js>t2-t1
2672
js>t3 = new Date('2009 Jan 1')
Thu Jan 01 2009 00:00:00 GMT-0500 (Eastern Standard Time)
js>t1-t3
2470768442
js>t1>t3
true
var date = new Date(); // will give you todays date.
// following calls, will let you set new dates.
setDate()
setFullYear()
setHours()
setMilliseconds()
setMinutes()
setMonth()
setSeconds()
setTime()
var yesterday = new Date();
yesterday.setDate(...date info here);
if(date>yesterday) // will compare dates