Мне нужно выполнить проверку даты в формате «ДД / ММ / ГГГГ». Дата должна:
- не быть в прошлом
- быть максимум 6 месяцев в будущем
Он работает нормально, но принимает текущий день как недопустимую дату. Я много чего пробовал, но не могу понять, почему. Может проблема в строительстве ...
let daaa = moment(new Date()).date();
let daaad = moment(new Date()).date();
alert(moment(daaad).isSame(daaa));
Также попробуйте 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;
Я ожидал также поймать текущую дату в действительных датах.
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();
// set hours, minutes, seconds and milliseconds to zero i.e. 12am
today.setHours(0, 0, 0, 0);
Тогда вы сможете провести сравнение, как и ожидали.
Update Спасибо RobG за указание на то, что setHours также может устанавливать минуты, секунды и миллисекунды.
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Обратите внимание, что JavaScript — это НЕ Java. Включите все теги, относящиеся к вашему вопросу: например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [стройный] и т. д.
today.setHours(0,0,0,0)
. ;-)