Я должен сделать проверку даты в формате «ДД / ММ / ГГГГ», дата не должна быть в прошлом и должна быть в течение следующих 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;
Я ожидал поймать также текущую дату в действительные даты
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);
Тогда вы сможете сделать сравнение, как вы ожидали.
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.