Я должен сделать проверку даты в формате «ДД / ММ / ГГГГ», дата не должна быть в прошлом и должна быть в течение следующих 6 месяцев макс. Он работает нормально, но принимает текущий день как недопустимую дату ... Я пробовал много вещей, но не могу понять, почему ... может быть, проблема в том, что строительство ...

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

также попробуйте new Date (). getTime () и 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;

Я ожидал поймать также текущую дату в действительные даты

0
dist

1 ответ

Проблема вызвана Date.now () , включая текущее время. Так что если вы проверяете 28/10/2019 , то 2019-10-28T00: 00: 00 почти наверняка до сегодняшней даты с компонентом времени:

(selectedDate >= today && plusSixMonths > selectedDate)

становится

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

Что будет false .

Вам необходимо удалить компоненты времени из today ( new Date () также получает текущее время как объект даты)

let today = new Date();
today.setHours(0);
today.setMinutes(0);
today.setSeconds(0);
today.setMilliseconds(0);

Тогда вы сможете сделать сравнение, как вы ожидали.

58589635