【发布时间】:2019-04-25 23:49:41
【问题描述】:
我正在使用 Angular Material,并且我有一个动态的日期数组,我希望从我的日期选择器中排除这些日期。此外,我还试图排除星期六。如何使用 matDatepickerFilter 返回多个日期? 请记住,我不能单独对数组的每个项目进行硬编码,因为数组是流动的,一段时间后它的值和长度都会发生变化。
这是我的 HTML:
<mat-form-field style="text-align: center;"
[ngClass]="{'hideTitle': submitted && f4.houseNumber.errors?.required && f4.aptNumber.errors?.required}">
<input matInput
[matDatepicker]="picker"
placeholder="Desired Delivery Date"
[matDatepickerFilter]="myFilter"
formControlName="deliveryDate"
style="font-family: 'Open Sans Condensed', sans-serif; color:white;">
<mat-datepicker-toggle matSuffix [for]="picker"
style="color:gold;outline:none;"></mat-datepicker-toggle>
<mat-datepicker touchUi #picker disabled="false"></mat-datepicker>
</mat-form-field>
这是我的数组:
this.allDupedDates = [
new Date('2019-04-30T00:00:00+02:00'),
new Date('2019-04-28T00:00:00+02:00'),
new Date('2019-05-21T00:00:00+02:00'),
new Date('2019-05-23T00:00:00+02:00')
]
这是代码:
myFilter = (d: Date): boolean => {
const time = d.getTime();
const day = d.getDay();
for (let i = 0; i < this.allDupedDates.length; i++) {
var date = this.allDupedDates[i].getTime();
return time !== date
}
return day !== 6;
}
【问题讨论】:
-
您确认
d和所有allDupDates已将小时/分钟/秒/毫秒设置为0 吗?另外,任何 allDupDates 都可以是星期六吗?最好在for之前有if (day === 6) {return false;}。 -
小时/分钟/秒/毫秒设置为 0。如果我返回 false 则每个日期都无效。
-
时区表示小时不为零 - 例如,
(new Date('2019-05-23T00:00:00+02:00').getTime() / (1000 * 60 * 60)) % 24返回 22。所以最好比较时间部分是否与您给出的“d”相匹配 - 例如, displaytime % (1000 * 60 * 60 * 24)和date % (1000 * 60 * 60 * 24)以确保比较。返回false时,是否切换了比较(注意我有=== 6,而不是原来的!== 6)?
标签: angular typescript datepicker angular-material