мне нужно проверить, находится ли Дата между minDate и maxDate. но когда я пытаюсь сравнить с minDate, я должен стать действительным как false, но получаю истину.
let minDate = "27-05-2019";
let maxDate = "27-05-2019";
let date = "13-02-2018";
var valid;
if (new Date(date.replace( /(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3")).toDateString() >= new Date(minDate.replace( /(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3")).toDateString()){
valid = true;
} else {
valid = false;
}
console.info(valid);заранее спасибо
Вы сравниваете строковое представление дат. Сравните даты напрямую.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Используйте moment.js
isBetween - ссылка на сайт
moment().isBetween(moment-like, moment-like);
Пример
let minDate = "27-05-2019";
let maxDate = "27-05-2019";
let date = "13-02-2018";
moment(date).isBetween(moment(minDate), moment(maxDate));
мне просто нужно сравнить с простым javascript
@NandhaKumar, пока я немного сочувствую (момент - это увеличение полезной нагрузки массивный, просто чтобы сравнить пару дат), это то, что должно быть заявленным требованием в самом вопросе.
@LukeWalker, ваш простой ответ JS неверен или, в лучшем случае, неполный: конструктор объекта Date (согласно спецификации) гарантированно работает только с целочисленными аргументами или строками даты в формате ISO 8601, а ваш - нет.
спасибо @luke. пожалуйста, проголосуйте за этот вопрос, если вы действительно считаете его полезным.
Когда вы используете метод toDateString(), вы конвертируете свой объект Date в строку, поэтому вы сравниваете только две строки в вашем if.
Удалите этот вызов метода, и он должен работать.
let minDate = "27-05-2019";
let maxDate = "27-05-2019";
let date = "13-02-2018";
var valid;
if (new Date(date.replace( /(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3")) >= new Date(minDate.replace( /(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3"))) {
valid = true;
} else {
valid = false;
}
console.info(valid);@JaredSmith, вы правы :), просто продолжал использовать дату в том виде, в котором она использовалась, но, вероятно, было бы лучше разбить дату на целые числа перед преобразованием в Date.
Вы можете использовать метод JavaScript Date: https://www.w3schools.com/js/js_date_methods.asp
let minDate = new Date("2018-01-13"),
maxDate = new Date("2018-03-13"),
date = new Date("2018-02-13"),
valid = false;
if (date.getTime() >= minDate.getTime() && date.getTime() <= maxDate.getTime()) {
valid = true;
}Простое JS-решение с парой вспомогательных функций:
const splitMyDateString = str => {
const [day, mon, yr] = str.split('-').map(Number);
return [yr, mon, day];
};
const makeDate = ([yr, mon, day]) => {
return new Date(yr, mon - 1, day);
};
let minDate = makeDate(splitMyDateString("27-05-2019"));
let maxDate = makeDate(splitMyDateString("27-05-2019"));
let date = makeDate(splitMyDateString("13-02-2018"));
let valid = (date >= minDate) && (date <= maxDate);
Обратите внимание, что конструктор Date не гарантирует приема строк, за исключением формата ISO 8601. Итак, мы передаем целые числа вместо. Также обратите внимание, что мы должны вычесть 1 из месяца, потому что месяцы JS - это 0-11, а не 1-12.
Вы можете использовать объект Date из JavaScript: wiki.base22.com/btg/…