#javascript
Вопрос:
У меня есть два массива.
let dateArray = ['2018-05-04T00:00:00 01:00', '2019-04-20T00:00:00 01:00', '2020-05-29T00:00:00 01:00'];
let rangesArray = [['2021-09-01','2022-09-01'],['2019-09-01','2020-09-01']];
Как проверить, находятся ли даты из dateArray между датами в rangesArray.
rangesArray[0] — это первый диапазон, меня интересуют даты между 2021-09-01 и 2022-09-01.
rangesArray[1] является вторым диапазоном — меня интересуют даты между 2019-09-01 и 2020-09-01.
Комментарии:
1. Это не даты — это строки. Шаг 1: создайте даты.
2. @RandyCasburn прав. Создайте даты с помощью новой даты() . Вы также можете установить определенный формат для своей даты. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Ответ №1:
В одну сторону :
let dateArray = ['2018-05-04T00:00:00 01:00', '2019-04-20T00:00:00 01:00', '2020-05-29T00:00:00 01:00'];
let rangesArray = [['2021-09-01','2022-09-01'],['2019-09-01','2020-09-01']];
const res = []
dateArray.forEach(d => {
rangesArray.forEach(a => {
if ((new Date(d) >= new Date(a[0])) amp;amp; (new Date(d) <= new Date(a[1]))){
res.push({date: d, range: a[0] ' ' a[1]})
}
})
})
console.log(res)
Комментарии:
1. В своем заявлении if вы используете
... >= ... amp;amp; ... <= ...
. Я думаю, что это ошибка, потому что дата не может быть равна началу и концу диапазона в одно и то же время. Это должно быть>= amp;amp; <
или> amp;amp; <=
.2. Привет, приятель 🙂 дата не обязательно должна быть равной, она может быть (меньше ИЛИ равна) и (больше ИЛИ равна)
3. Привет 🙂 Вы абсолютно правы !
Ответ №2:
используется Date.parse()
для преобразования строки в дату для сравнения.
рабочий пример:
function dateCheck(from, to, check) {
var fDate, lDate, cDate;
fDate = Date.parse(from);
lDate = Date.parse(to);
cDate = Date.parse(check);
if (cDate <= lDate amp;amp; cDate >= fDate) {
return true;
}
return false;
}
let dateArray = [
"2018-05-04T00:00:00 01:00",
"2019-04-20T00:00:00 01:00",
"2020-05-29T00:00:00 01:00",
];
let rangesArray = [
["2021-09-01", "2022-09-01"],
["2019-09-01", "2020-09-01"],
];
for (let i = 0; i < dateArray.length; i ) {
for (let j = 0; j < rangesArray.length; j ) {
console.log(dateCheck(rangesArray[j][0], rangesArray[j][1], dateArray[i]));
}
}
пояснение:
dateCheck
функция проверяет, находится ли дата между from
датой и to
датой. с помощью двух циклов вы можете получить желаемый результат.