Saat membandingkan objek tanggal di Javascript saya menemukan bahwa bahkan membandingkan tanggal yang sama tidak mengembalikan true.
var startDate1 = new Date("02/10/2012");
var startDate2 = new Date("01/10/2012");
var startDate3 = new Date("01/10/2012");
alert(startDate1>startDate2); // true
alert(startDate2==startDate3); //false
Bagaimana saya bisa membandingkan kesetaraan tanggal-tanggal ini? Saya tertarik untuk menggunakan Date
objek asli JS dan bukan pustaka pihak ketiga karena tidak tepat menggunakan JS pihak ketiga hanya untuk membandingkan tanggal.
javascript
Harshana
sumber
sumber
Jawaban:
Itu karena dalam kasus kedua, objek tanggal sebenarnya dibandingkan, dan dua objek tidak pernah sama satu sama lain. Paksa mereka untuk menghitung:
alert( +startDate2 == +startDate3 ); // true
Jika Anda menginginkan konversi yang lebih jelas ke angka, gunakan salah satu:
alert( startDate2.getTime() == startDate3.getTime() ); // true
atau
alert( Number(startDate2) == Number(startDate3) ); // true
Oh, referensi ke spek: §11.9.3 Algoritma Perbandingan Persamaan Abstrak yang pada dasarnya mengatakan ketika membandingkan objek,
obj1 == obj2
adalah benar hanya jika mereka merujuk ke objek yang sama, jika tidak hasilnya salah.sumber
Date.prototype.getTime
akan selalu mengembalikan Angka ...getTime
paling baik untuk kejelasan (dan kebetulan tercepat di browser yang saya uji juga).Bandingkan tanggal menggunakan
getTime()
kembali milidetik dari periode (yaitu angka):var startDate1 = new Date("02/10/2012"); var startDate2 = new Date("01/10/2012"); var startDate3 = new Date("01/10/2012"); alert(startDate1.getTime() > startDate2.getTime()); // true alert(startDate2.getTime() == startDate3.getTime()); //true
Juga pertimbangkan untuk menggunakan
Date
konstruktor yang mengambil nomor tahun / bulan / tanggal eksplisit daripada mengandalkan representasi string (lihat: Date.parse () ). Dan ingatlah bahwa tanggal dalam JavaScript selalu direpresentasikan menggunakan zona waktu klien (browser).sumber
Anda tidak perlu menggunakan metode getTime - Anda dapat mengurangi objek tanggal dari objek tanggal lain. Ini akan mengembalikan perbedaan milidetik (negatif, jika detik kemudian tanggal)
var startDate1 = new Date("02/10/2012"); var startDate2 = new Date("01/10/2012"); var diff= (startDate1 -startDate2)
// mengevaluasi ke 0 jika tanggal memiliki stempel waktu yang sama
sumber
Anda dapat membandingkan milidetik sebenarnya:
sumber
Anda juga dapat menggunakan fungsi valueOf ()
var startDate1 = new Date("02/10/2012").valueOf(); var startDate2 = new Date("01/10/2012").valueOf(); var startDate3 = new Date("01/10/2012").valueOf(); alert(startDate1>startDate2); // 1326150000000 > 1328828400000 true alert(startDate2==startDate3); // 1328828400000 > 1326150000000 false
sumber