Angular Material datepicker +矩,序列化用于后端的矩对象?

时间:2019-07-10 09:18:39

标签: javascript angular momentjs angular-reactive-forms angular-moment

我有一个使用时间适配器和区域设置的日期选择器,所有日期都可以,但是我无法在后端进行转换。我使用formGroup.value

从表单中获取

在将其发送到后端之前(通过有角度的firebase),它看起来像:

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函数发送它。

编辑:当前变通办法是相当hacky / unpreffered:

    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 :(得分:0)

您可以在发送到后端之前使用format

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

我通常要做的是

momentDate.utc().toISOString()