当你使用 Date javascript 对象时你需要小心
mat-datepicker 返回一个类型的日期对象,例如
Mon Sep 19 2022 00:00:00 GMT+0200
当您使用时,例如
new Date('2022-08-24')
//you get
Date Wed Aug 24 2022 02:00:00 GMT+0200
看看如何添加“02:00:00” - 因为我在 GTM+0200。因此,您首先需要的是使用 setHours 将您的范围设置为 00:00:00
res.forEach((element: any) => {
const el=[
new Date(element.startDate),
new Date(element.endDate),
]
el[0].setHours(setHours(0, 0, 0, 0))
el[1].setHours(setHours(0, 0, 0, 0))
this.dateBooking.push(el);
});
}
同样,你需要小心对待“今天”。所以在 ngOnInit 中你可以使用
ngOnInit() {
//see how use setHours also in today
const today = new Date();
today.setHours(0, 0, 0, 0);
this.dateDisabled = (date: Date | null): any => {
if (date! < today) return false;
for (let i = 0; i < this.dateBooking.length; i++) {
if (date! >= this.dateBooking[i][0] && date! <= this.dateBooking[i][1])
return false;
}
return true;
};
//or
this.dateDisabled = (date: Date | null): any => {
return (
date! >= today &&
this.dateBooking.reduce((a, b) => {
return a && (date! < b[0] || date! > b[1]);
}, true)
);
};
}
注意:第二种方法循环遍历 dateBooking 的所有元素。它看起来比第一个慢,但实际上花费的时间(30 天* dateBooking.length)并不可观
see 堆栈闪电战 https://stackblitz.com/edit/angular-nosmhs?file=src%2Fapp%2Fdatepicker-overview-example.ts
注意2:如果您需要多个“dateDisabled”函数,请使用函数数组
dateDisabled:((date: Date | null)=>any)[]=[]
// and use
dateDisabledObj[index]=(date: Date | null): any => {...}
Or 和函数对象
dateDisabledObj:any={}
// and use
dateDisabledObj[''+id]=(date: Date | null): any => {...}