javascript - Angular material datovelger returnerer Moment-objekt i stedet for Date


Jeg har et merkelig problem, i min HTML har jeg definert-

    <mat-radio-button value="embargoed">
        <div>Everyone, limited by date</div>
        <mat-form-field *ngIf="data.selected === 'embargoed'">
            <mat-label>Available from date</mat-label>
            <input matInput [matDatepicker]="picker" #input [(ngModel)]="date">
            <mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
            <mat-datepicker #picker></mat-datepicker>
        </mat-form-field>
    </mat-radio-button>

i min komponent initialiserte jeg-

date = new Date();

Jeg har en OnSubmit-funksjon som gjør-

onSubmit(){
    if (this.data.selected === 'embargoed') {
        this.data.date = this.date;
    }
}

I debug kan jeg se at this.date er et Moment-objekt i stedet for et Date-objekt, noen idé hvorfor?

Svar #1

Jeg fant grunnen. I min app.module.ts hadde jeg erklært:

 {provide: MAT_DATE_FORMATS, useValue: MAT_MOMENT_DATE_FORMATS}

Svar #2

Fra https://material.angular.io/components/datepicker/overview:

Typen verdier som datovelgeren forventer avhenger av typen DateAdapter som brukes i applikasjonen din. NativeDateAdapter, for eksempel, fungerer direkte med vanlige JavaScript Date-objekter. Når du derimot bruker MomentDateAdapter, vil verdiene alle være Moment.js-instansene.

Også: https://material.angular.io/components/datepicker/overview#choosing-a-date-implementation-and-date-format-settings:

Datovelgeren ble bygget for å være uavhengig av datoimplementasjon. Dette betyr at den kan gjøres i stand til å fungere med en rekke forskjellige datoimplementasjoner. Det betyr imidlertid også at utviklere må sørge for å tilby de nødvendige delene for at datovelgeren skal fungere med deres valgte implementasjon.

Relaterte artikler