Bagaimana membandingkan hanya tanggal di moment.js

107

Saya baru mengenal moment.js. Saya memiliki objek tanggal dan memiliki beberapa waktu yang terkait dengannya. Saya hanya ingin memeriksa apakah tanggal itu lebih besar dari atau sama dengan tanggal hari ini, tidak termasuk waktu saat membandingkan.

 var dateToCompare = 2015-04-06T18:30:00.000Z

Saya hanya ingin memeriksa apakah dateToCompare sama atau lebih besar dari tanggal hari ini. Saya telah memeriksa isSame of moment.js, tetapi tampaknya mengambil string dan hanya bagian tanggal. Tetapi saya tidak ingin mengubah tanggal saya menjadi string atau memanipulasinya lebih lanjut. Karena saya khawatir javascript mungkin melakukan sesuatu yang tidak terduga saat mengubah tanggal tersebut menjadi string (seperti menambahkan offset atau dst, dll), atau mungkin saya salah.

Contoh isSame () dari docs

moment('2010-10-20').isSame('2010-10-20');

Juga saya mencari sesuatu seperti isSame () dan isAfter () digabungkan sebagai satu pernyataan.

Saya perlu membandingkan hanya menggunakan moment.js. Tolong jangan menyarankan perbandingan tanggal javascript biasa.

NoobGeek
sumber

Jawaban:

183

Dokumennya cukup jelas bahwa Anda meneruskan parameter kedua untuk menentukan perincian.

Jika Anda ingin membatasi perincian ke unit selain milidetik, teruskan unit sebagai parameter kedua.

moment('2010-10-20').isAfter('2010-01-01', 'year'); // false
moment('2010-10-20').isAfter('2009-12-31', 'year'); // true

Karena parameter kedua menentukan presisi, dan bukan hanya satu nilai untuk diperiksa, menggunakan hari akan memeriksa tahun, bulan dan hari.

Untuk kasus Anda, Anda akan lulus 'day'sebagai parameter kedua.

zzzzBov
sumber
1
Terima kasih! Sepertinya saya tidak perlu mengonversi ke string. Tetapi apakah kita memiliki metode umum untuk isSame () dan isAfter ()
NoobGeek
2
Saya sudah menggunakan itu. Terima kasih! hanya ingin melihat apakah ada fungsi yang sama, bukan berarti sulit untuk menggunakan keduanya.
NoobGeek
@kabirbaidhya, sebelum melakukan pengeditan yang tidak diminta yang cukup besar, dianggap sopan untuk memberi komentar pada pertanyaan dan jawaban yang mencatat masalah. Saya tidak merasa bahwa pengeditan yang Anda lakukan perlu, jadi saya membatalkannya. Jika Anda merasa informasi itu penting, mohon pertimbangkan untuk memposting jawaban Anda sendiri.
zzzzBov
4
Sekadar untuk melengkapi: "Karena parameter kedua menentukan ketepatan, dan bukan hanya satu nilai untuk diperiksa, menggunakan hari akan memeriksa tahun, bulan dan hari."
eveevans
6
@NoobGeek Sekarang ada isSameOrBefore () dan isSameOrAfter () dari versi 2.10.7 dan seterusnya.
WhiteHotLoveTiger
6

Dalam kasus saya, saya melakukan kode berikut untuk membandingkan 2 tanggal semoga itu akan membantu Anda ...

var date1 = "2010-10-20";
var date2 = "2010-10-20";
var time1 = moment(date1).format('YYYY-MM-DD');
var time2 = moment(date2).format('YYYY-MM-DD');
if(time2 > time1){
	console.log('date2 is Greter than date1');
}else if(time2 > time1){
	console.log('date2 is Less than date1');
}else{
	console.log('Both date are same');
}
<script src="https://momentjs.com/downloads/moment.js"></script>

Renish Gotecha
sumber
6

Anda dapat menggunakan startOf('day')metode untuk membandingkan tanggal saja

Contoh:

var dateToCompare = moment("06/04/2015 18:30:00");
var today = moment(new Date());

dateToCompare.startOf('day').isSame(today.startOf('day'));
Anurag Aron Tigga
sumber