Угловой материал dateAdapter не рассматривает разные часы / минуты / секунды как разные даты - PullRequest
0 голосов
/ 17 октября 2019

Я строю расширение времени (часы / минуты / секунды) для углового материала DatePicker (потому что пока нет хороших). Проблема заключается в том, что когда я обновляю время в компоненте времени, я использую метод DatePickers select , который является единственным методом для установки даты программным образом с использованием объекта Date. Проблема заключается в том, что внутренняя функция выбора Datepickers не учитывает разные часы / минуты / секунды как разные даты, и при поставке с таким сценарием она не будет обновлять свою внутреннюю работу. Ниже приведена функция выбора Angle Material Datepicker:

MatDatepicker.prototype.select = function (date) {
    var oldValue = this._selected;
    this._selected = date;
    // this will eveluate as false since only hours/minuts/seconds are different and not day/month/year
    if (!this._dateAdapter.sameDate(oldValue, this._selected)) { 
        this._selectedChanged.next(date);
    }
};   

Внутри метода sameDate они используют метод с именем compareDate , который проверяет две даты только по дням. и месяц и год:

DateAdapter.prototype.compareDate = function (first, second) {
    return this.getYear(first) - this.getYear(second) ||
        this.getMonth(first) - this.getMonth(second) ||
        this.getDate(first) - this.getDate(second);
};

Это означает, что метод select не будет выдавать новую дату внутренним компонентам и деталям DatePicker.

Я использую пользовательский NativeDateAdapter и пользовательский MatDateFormats , но, поскольку вышеупомянутая проверка хочет выдать новую дату, эти механизмы должны быть достигнуты.

PSВсе работает нормально, когда обновленная дата имеет другой день / год / месяц, включая пользовательское форматирование времени, включающее параметры времени.

1 Ответ

0 голосов
/ 22 октября 2019

Я решил эту проблему, просто заново внедрив базовые классы compareDate , используя пользовательский NativeDateAdapter.

export class AppDateAdapter extends NativeDateAdapter {
    format(date: Date, displayFormat: Object): string {
        // format your dates
    }
    compareDate(first: Date, second: Date) {
       // compare first/current date with second/previous date
       // you can implement your logic here.
       return 1;
    }
}
...