angular - date.getDate er ikke en funksjon Typescript


Jeg har 3 inntastingskontroller, to av datotype og en er tall. Det jeg vil gjøre er å hente datoen fra den første kontrollen og antall dager fra den andre kontrollen, legge dem sammen og tilordne det til den tredje datokontrollen i TypeScript. Men det gir meg en feil, her er koden min:

activeFrom: Date;
activeNoDays: number;

    //UpdateExpiry Function is called by textbox event
        updateExpiry=():void =>{
             this.gDetailDS = this.gDetailForm.value;
            console.log("Expiry days:"+this.gDetailDS.activeNoDays);
            console.log (this.addDays(this.gDetailDS.activeFrom,this.gDetailDS.activeNoDays))
          }

          addDays(date: Date, days: number): Date {
            console.log('adding ' + days + ' days');
            console.log(date);
            date.setDate(date.getDate() + days);
            console.log(date);
            return date;
          }

Her er HTML-kontroller:

<input
     id="txtActivateFrom"
     type ="date"
     min="rdMinDate"
     formControlName="activeFrom"
     class="form-control"
     value="{{ this.gDetailDS.activeFrom | date:'yyyy-MM-dd' }}"
     displayFormat="yyyy-MM-dd"
     useValueAsDate />

<input  type="number"
        formControlName="activeNoDays" class="form-control"
        (change)="updateExpiry()"/>

konsollmeldinger:

Expiry days:25
adding 25 days
2019-07-12

Jeg har prøvd alt, men får fortsatt dette problemet :

FEIL TypeError: date.getDate er ikke en funksjon

lenke: skjermbilde av feil som vises i nettleserkonsollen

Svar #1

Jeg hadde en lignende problem en gang da jeg hentet datoer fra en nett-API. Jeg løste det ved å lage et nytt Date-objekt.

Så funksjonskallet ditt kan se slik ut:

this.addDays(new Date(this.gDetailDS.activeFrom),this.gDetailDS.activeNoDays)

Svar #2

Du må opprette Date-objektet før du prøver å sende det inn i addDays-funksjonen. Input.value av type="date" vil returnere en strengrepresentasjon og ikke et datoobjekt.

Hvis dette mottas over ledningen via JSON, må du fortsatt opprette datoobjektet når du gjør JSON.Parse()

fiddle: https://jsfiddle.net/o7y6u2zL/4/

let date = document.getElementById("start");
console.log(date.value);
console.log(typeof date.value);
let realDateObject = new Date(date.value);
console.log(typeof realDateObject)
<label for="start">Start date:</label>

<input type="date" id="start" name="trip-start"
       value="2018-07-22"
       min="2018-01-01" max="2018-12-31">

Relaterte artikler