我有一个从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
?
答案 0 :(得分:1)
要仅允许数组中的日期,可以myFilter
方法定义如下。
myFilter = (d: Date): boolean => {
// Only allow dates in `validDates`.
return this.validDates.findIndex( (valid_date) => d.getTime() === valid_date.getTime()) > -1
}
要忽略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;
};