Фильтровать массив по дате начала и окончания, используя JavaScript - PullRequest
2 голосов
/ 07 ноября 2019

У меня есть массив данных с начальной и конечной датой, который отображается в угловом календаре. Я хотел бы отфильтровать массив на основе даты начала и окончания.

0: {id: 86, start_date: "2019-11-06T09:00:13Z", end_date: "2019-11-11T14:00:13Z"}
1: {id: 86, start_date: "2019-11-04T18:30:00Z", end_date: "2019-11-07T07:12:09Z"}
2: {id: 86, start_date: "2019-11-04T18:30:00Z", end_date: "2019-11-07T07:03:21Z"}
3: {id: 86, start_date: "2019-11-26T18:30:00Z", end_date: "2019-11-27T07:03:21Z"}
4: {id: 66, start_date: "2019-11-04T18:30:00Z", end_date: "2019-11-07T07:12:09Z"}
5: {id: 66, start_date: "2019-11-05T18:30:00Z", end_date: "2019-11-12T07:03:21Z"}

Если я нахожусь в день 2019-11-07 (я не могу получить отсюда дату для фильтра), я хочу создать такой массив сверху без использования 2019-11-07

0: {id: 86, start_date: "2019-11-06T09:00:13Z", end_date: "2019-11-11T14:00:13Z"}
1: {id: 66, start_date: "2019-11-04T18:30:00Z", end_date: "2019-11-07T07:12:09Z"}

Ниже приведен фильтр, который я написал

data.forEach((item, index) => {
if (index !== data['results'].findIndex(i => i.id === item.id && 
new Date(i.start_date).toDateString() === new Date(item.start_date).toDateString() && 
new Date(i.end_date).toDateString() === new Date(item.end_date).toDateString())) {
data.splice(index, 1);
}                   
});
console.log(data);

Если я нахожусь на 2019-11-07, я не могу удалить этот элемент

0: {id: 86, start_date: "2019-11-06T09:00:13Z", end_date: "2019-11-11T14:00:13Z"}

Кто-нибудь может мне помочь?

Ответы [ 2 ]

0 голосов
/ 08 ноября 2019

Вот что вам нужно, согласно выбору даты фильтра: filterStartDate время должно 00:00:00 и filterEndDate время должно быть 23:59:59 ...

во-вторых используйте код ниже ...

let data = [
{id: 86, start_date: "2019-11-06T09:00:13Z", end_date: "2019-11-11T14:00:13Z"}
,{id: 86, start_date: "2019-11-04T18:30:00Z", end_date: "2019-11-07T07:12:09Z"}
,{id: 86, start_date: "2019-11-04T18:30:00Z", end_date: "2019-11-07T07:03:21Z"}
,{id: 86, start_date: "2019-11-26T18:30:00Z", end_date: "2019-11-27T07:03:21Z"}
,{id: 66, start_date: "2019-11-04T18:30:00Z", end_date: "2019-11-07T07:12:09Z"}
,{id: 66, start_date: "2019-11-05T18:30:00Z", end_date: "2019-11-12T07:03:21Z"}
]


const filterDate = {
  start_date: "2019-11-04T00:00:00Z",
  end_date: "2019-11-07T23:59:59Z",
};

const filteredItems = data.filter((item, index) => (new Date(item.start_date).getTime() >= new Date(filterDate.start_date).getTime() && new Date(item.end_date).getTime() <= new Date(filterDate.end_date).getTime()));

const personCount = filteredItems.length;

console.log(`Person count >>>>>>> ${personCount}`);
0 голосов
/ 07 ноября 2019

Используйте filter вместо forEach:

const filterDate = {
  start_date: "2019-11-07T09:00:13Z",
  end_date: "2019-11-07T09:00:13Z",
};

const filteredItems = data.filter((item, index) => item.start_date >= filterDate.start_date && item.end_date <= filterDate.end_date);

Я не уверен, действительно ли вы хотите включить только определенную дату или все элементы, содержащиеся в выбранном интервале. В этом примере предполагается последнее.

Также у вас не всегда может быть объект filterDate, поэтому вы хотите добавить специальную логику для проверки этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...