Как я могу сравнить строки даты? - PullRequest
0 голосов
/ 27 ноября 2018

Мне нужно проверить, находится ли дата между minDate и maxDate .но когда я пытаюсь сравнить с minDate, я должен получить значение false, но значение true ..

            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.log(valid);

заранее спасибо

Ответы [ 4 ]

0 голосов
/ 27 ноября 2018

Простое решение 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.

0 голосов
/ 27 ноября 2018

Когда вы используете метод 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.log(valid);
0 голосов
/ 27 ноября 2018

Вы можете использовать метод 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;
}
0 голосов
/ 27 ноября 2018

Использование 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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...