Saya harus membuat validasi tanggal dalam format 'DD/MM/YYYY'. Tanggal harus:

  • jangan jadi masa lalu
  • maksimal 6 bulan ke depan

Ini berfungsi dengan baik, tetapi hari ini dianggap sebagai tanggal yang tidak valid. Saya mencoba banyak hal, tetapi saya tidak tahu mengapa. Mungkin masalahnya ada di jika konstruksi ...

let daaa = moment(new Date()).date();
let daaad = moment(new Date()).date();
alert(moment(daaad).isSame(daaa));

Coba juga new Date().getTime() and getDate()

const selectedDate = new Date(value.split('/').reverse().join('-'));
let today = new Date(Date.now());
let plusSixMonths = new Date(Date.now());
plusSixMonths.setMonth(plusSixMonths.getMonth() + 6);
if (selectedDate >= today && plusSixMonths > selectedDate) return true;

Saya berharap untuk menangkap juga tanggal saat ini di tanggal yang valid.

1
dist 28 Oktober 2019, 13:54

1 menjawab

Jawaban Terbaik

Masalahnya disebabkan oleh Date.now(), termasuk waktu saat ini. Jadi, jika Anda memeriksa 28/10/2019 maka 2019-10-28T00:00:00 hampir pasti sebelum tanggal hari ini dengan komponen waktu:

(selectedDate >= today && plusSixMonths > selectedDate)

Menjadi

(2019-10-28T00:00:00 >= 2019-10-28T11:02:32 && 2020-04-28T11:02:32 > 2019-10-28T00:00:00)

Yang akan menjadi false.

Anda harus menghapus komponen waktu dari today (new Date() juga mendapatkan waktu saat ini sebagai objek tanggal)

let today = new Date();
// set hours, minutes, seconds and milliseconds to zero i.e. 12am
today.setHours(0, 0, 0, 0);

Maka Anda harus dapat membuat perbandingan seperti yang Anda harapkan.

Pembaruan Terima kasih kepada RobG karena menunjukkan bahwa setHours juga dapat mengatur menit, detik, dan milidetik.

1
phuzi 31 Oktober 2019, 08:19