Angular Material Datepicker:如何过滤以便只允许数组中的日期?

时间:2019-10-04 23:41:28

标签: angular datepicker angular-material

我有一个从API返回的日期数组。例如,我可能有一个名为validDates的数组,该数组将9月的所有星期一作为其值。我想使用“材质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)
]

日期选择器过滤器(不起作用)

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;
  }

问题在于,它仅以true返回最后一个日期(2019年9月30日星期一00:00:00 GMT-0500(中央夏令时)),因此只有第30个日期可以选择。我希望数组中的每个日期都可以选择。

如何为数组中的每个值返回true

2 个答案:

答案 0 :(得分:1)

要仅允许数组中的日期,可以myFilter方法定义如下。

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

请参见Stackblitz Demo

要忽略Date的时间部分,请参见:
Comparing date part only without comparing time in JavaScript

答案 1 :(得分:0)

最后我找到了正确的解决方案:

// The array of days of week to be available
const arr = [0, 3, 6];
this.expressSenderDate = (d: Date): boolean => {
    const day = d.getDay();
    // tslint:disable-next-line:align
    return arr.indexOf(day) !== -1;
};