为什么Moment函数返回“不是函数”?

时间:2019-11-26 10:06:16

标签: angular typescript momentjs

这在localhost上有效,但在我得到ERROR TypeError: n.endOf is not a function的生产环境中无效

import * as moment from 'moment';

changeMaxDate(maxTime: moment.Moment) {
    if (maxTime) {
        return maxTime.endOf('day').toISOString();
    }
}

我已经阅读了所有其他有关Moment的问题和文档,但无济于事。

我已经尝试过import moment from 'moment';(这也可行)和其他方法都没有成功

Moment.js 2.24.0

TS 3.5.3

角度8.2.3

<input matInput
                   [matDatepicker]="maxTime"
                   [(ngModel)]="data.maxTime"
                   (ngModelChange)="changeMaxDate(data.maxTime)"
                   placeholder="{{ 'yyyy-mm-dd' | translate }}">
    <mat-datepicker-toggle matSuffix [for]="maxTime"></mat-datepicker-toggle>
    <mat-datepicker #maxTime></mat-datepicker>

从本地主机中的日期选择器获取的maxTime

Moment {_isAMomentObject: true, _i: {…}, _isUTC: false, _pf: {…},                     
_locale: Locale, …}
_d: Mon Nov 04 2019 23:59:59 GMT+0100 (Central European Standard Time)
__proto__: Object
_i: {year: 2019, month: 10, date: 4}
_isAMomentObject: true
_isUTC: false
_isValid: true
_locale: Locale {_calendar: {…}, _longDateFormat: {…}, _invalidDate:                 "Invalid date", _dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/, ordinal: ƒ, …}
_pf: {empty: false, unusedTokens: Array(0), unusedInput: Array(0),     overflow: -1, charsLeftOver: 0, …}
__proto__: Object

在生产中是一个字符串 Mon Nov 04 2019 00:00:00 GMT+0100 (Central European Standard Time)

3 个答案:

答案 0 :(得分:0)

您要传递什么数据作为参数?就您而言,我相信moment.Moment的类型为 any 。在这种情况下,即使您将传递一些空对象{}或Date,条件if(maxTime)也会返回true。但是该对象没有定义 endOf 函数。

您可以这样做:

changeMaxDate(maxTime: moment.Moment) {
    if (maxTime && typeof maxTime.endOf === 'function') {
        return maxTime.endOf('day').toISOString();
    }
}

答案 1 :(得分:0)

在您的app.module中,将如下所示的MomentDateAdapter添加到您的提供者中,以便将实际时间与matDatepicker一起使用

{provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE]},
{provide: MAT_DATE_FORMATS, useValue: MAT_MOMENT_DATE_FORMATS},

并从@angular/material

导入它们

答案 2 :(得分:0)

[(ngModel)](ngModelChange)一起使用的快速提示可能并没有完全按照您的意图进行,因为[(ngModel)]已经绑定了更改。 https://angular.io/guide/template-syntax#two-way-binding- 此外,我认为输出的格式不符合您的功能。