Угловой материал DatePicker + момент, сериализующий объекты момента для бэкэнда? - PullRequest
2 голосов
/ 10 июля 2019

У меня есть средство выбора даты, использующее адаптер момента с языковым стандартом, все в порядке с датами, но я не могу преобразовать их в бэкэнд.Я получаю его из формы, используя formGroup.value

Перед отправкой его бэкэнду (через угловую пожарную базу) это выглядит следующим образом:

from: Moment
_d: Sat Jul 06 2019 01:00:00 GMT+0100 (British Summer Time) {}
_i: {year: 2019, month: 6, date: 6}
_isAMomentObject: true
_isUTC: true
_isValid: true
_locale: Locale {_calendar: {…}, _longDateFormat: {…}, _invalidDate: "Invalid date", ordinal: ƒ, _dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, …}
_offset: 0
_pf: {empty: false, unusedTokens: Array(0), unusedInput: Array(0), overflow: -1, charsLeftOver: 0, …}
__proto__: Object

Но на бэкэнде, регистрирующем его, выглядитнапример:

from:
>        { _isAMomentObject: true,
>          _i: [Object],
>          _isUTC: true,
>          _pf: [Object],
>          _locale: [Object],
>          _d: {},
>          _isValid: true,
>          _offset: 0 },

с пустыми значениями и, конечно, выдается ошибка TypeErrors, когда я пытаюсь получить из нее какую-либо дату.

Я отправляю его через @angular/fire как функцию httpCallable.

РЕДАКТИРОВАТЬ: Текущий обходной путь, который довольно хакерский / непривычный:

    let oldFrom: moment.Moment = this.from.value;
    let oldTo: moment.Moment = this.to.value;
    this.ReportForm.controls.from.setValue(oldFrom.toISOString());
    this.ReportForm.controls.to.setValue(oldTo.toISOString());
    this.submitted.emit(this.ReportForm.value);
    this.ReportForm.controls.from.setValue(oldFrom);
    this.ReportForm.controls.to.setValue(oldTo);

Мне нужно изменитьэто назад к объекту момента, иначе они перестанут работать на все будущие даты.

1 Ответ

0 голосов
/ 10 июля 2019

Вы можете использовать format перед отправкой на сервер.

momentDate.format('YYYY-MM-DD')

Что я обычно делаю, это

momentDate.utc().toISOString()
...