Angular Material Datepicker: Как отфильтровать, чтобы разрешались только даты в массиве? - PullRequest
1 голос
/ 05 октября 2019

У меня есть массив дат, возвращенных из API. Например, у меня мог бы быть массив, озаглавленный validDates, в котором все значения по понедельникам в сентябре являются их значениями. Я хотел бы использовать фильтр Material Datepicker , чтобы разрешить выбор только значений даты в массиве.

Пример массива даты

validDates = [
    Mon Sep 02 2019 00:00:00 GMT-0500 (Central Daylight Time),
    Mon Sep 09 2019 00:00:00 GMT-0500 (Central Daylight Time),
    Mon Sep 16 2019 00:00:00 GMT-0500 (Central Daylight Time),
    Mon Sep 23 2019 00:00:00 GMT-0500 (Central Daylight Time),
    Mon Sep 30 2019 00:00:00 GMT-0500 (Central Daylight Time)
]

Фильтр Datepicker (не работает)

myFilter = ( d: Date ): boolean => {
    let dateOpen: boolean;
    for ( let x = 0; x < this.validDates.length; x++ ) {
      dateOpen = d.toString() === this.validDates[ x ].toString();
    }
    return dateOpen;
  }

Проблема в том, что возвращается только последняя дата (пн. 30 сентября 2019 00:00: 00 GMT-0500 (Центральное дневное время)) как true, так что выбирается только 30-е число. Я хочу, чтобы каждая из дат в массиве была выбираемой.

Как я могу вернуть true для каждого значения в массиве?

1 Ответ

1 голос
/ 05 октября 2019

Чтобы разрешить только даты в массиве, метод myFilter можно определить следующим образом.

myFilter = (d: Date): boolean => {
  // Only allow dates in `validDates`.
  return this.validDates.findIndex( (valid_date) => d.getTime() === valid_date.getTime()) > -1
}

См. Демонстрация Stackblitz

Чтобы игнорировать компонент времени Date, смотрите: Сравнение только части даты без сравнения времени в JavaScript

...