У меня есть Ngb-Datepicker, который позволяет выбрать диапазон. Я использую moment.js для преобразования NgbDate в моментный объект, чтобы я мог конвертировать и выводить формат так, как мне хотелось бы: ex. Ср. 23 января.
Я понял, что NgbDates присваивает январю значение 1, а момент дает январю 0, поэтому я использовал myMoment.subtract(1, 'months')
, чтобы разрешить это (до того, как даты были выведены как месяц спустя).
Моя проблема сейчас в том, что в этот момент количество дней по сравнению с исходным месяцем остается одинаковым. Поэтому, когда я пытаюсь выбрать диапазон дат, скажем, с 1 января по 31 января, он не работает, потому что все, что больше 28, недопустимо.
29-31-й по-прежнему можно выбрать, но когда я пытаюсь вывести его с помощью функции formatDate()
, он считается недопустимой датой, поскольку момент все равно обрабатывает его как следующий месяц (февраль) - вы Вы увидите, что на ярлыке «to:» внизу не будет добавлена дата.
Stackblitz:
https://stackblitz.com/edit/angular-xtrvjr?file=app%2Fdatepicker-range.ts
Вывод на консоль, когда я регистрирую конвертированный момент:
![Console output](https://i.stack.imgur.com/iu6jg.jpg)
Функция преобразования даты:
// Convert date to "Mon Feb 01" format
formatDate(date: NgbDate) {
const myMoment: moment.Moment = moment(date);
// NgbDates use 1 for Jan, Moement uses 0, must substract 1 month for proper date conversion
var convertedMoment = myMoment.subtract(1, 'months');
if (convertedMoment.isValid()) {
return convertedMoment.format('ddd MMM DD');
} else {
return '';
}
}
Шаблон, который использует функцию:
From: {{ formatDate(fromDate) }}
To: {{ formatDate(toDate) }}