Помогите написать функцию на блокировку даты

Есть календарь

<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;
}
→ Ссылка