Помогите написать функцию на блокировку даты
Есть календарь
<ngb-datepicker #dp
[(ngModel)]="models"
(navigate)="date = $event.next"
[markDisabled]="isDisabled"
(click)="sendAddDate($event)">
</ngb-datepicker>
[markDisabled] = "isDisabled" отвечает за блокировку диапазона дат
в ts.
Помогите написать метод isDisabled
У меня приходит json файл с массивом диапазонов дат в формате:
[{StartDate: <'DD.MM.YYYY>', EndDate: '<DD.MM.YYYY>'}, ...]
Функция isDisabled - нужно вставить массив (приведён ниже чтоб все даты из него были заблокированы)
tripsDate: [{ StartDate: '', EndDate: '' }] =
[{StartDate: '', EndDate: ''}];
isDisabled = (date: NgbDate) =>
date.month == 6 && date.day >= 13 && date.day <= 22;
Исправил на такой код, но он не работает
isDisabled = (date: NgbDate) => {
for(const d of this.tripsDate) {
// Если попали в интервал, то возвращаем true
let x = new Date(d.StartDate)
let y = new NgbDate(x.getFullYear(),x.getMonth(),x.getDay())
let z = new Date(d.EndDate)
let w = new NgbDate(z.getFullYear(),z.getMonth(),z.getDay())
if (date.after(y) && date.before(w)) {
return true;
}
}
return false;
}
Ответы (1 шт):
Автор решения: Alexander Chernin
→ Ссылка
При помощи вот этих функций класса NgbDate
isDisabled = (date: NgbDate) => {
// Функция преобразования вашего формата даты в NgbDate
// fromDate должна быть в формате DD.MM.YYYY (то есть как у вас)
const toNgbDate = (fromDate: string): NgbDate | undefined => {
const a: string[] = fromDate.split('.');
if (!a || a.length != 3) {
return undefined;
}
return NgbDate.from({
year: +a[2],
month: +a[1],
day: +a[0]
});
};
for(const d of tripsDate) {
const start: NgbDate | undefined = toNgbDate(d.StartDate);
const end: NgbDate | undefined = toNgbDate(d.EndDate);
// Обе границы должны быть валидны
if (!start || !end) {
continue;
}
// Если интервал типа [...)
if (date.equals(start)) {
return true;
}
// Либо, если интервал типа [...]
// if (date.equals(start) || date.equals(end)) {
// return true;
// }
// Если попали в интервал, то возвращаем true
if (date.after(start) && date.before(end)) {
return true;
}
}
return false;
}