Búsqueda de sitios web

el valor getDay no es una función Typescript Angular


Encontré una pregunta similar, pero no respondió al problema que estoy enfrentando.

Estoy intentando convertir una fecha en una cadena. Aquí está mi implementación.

export class DataFormater {

    formatDDMMMYYY(date: Date): string {
        return date.getDay().toString() + '/' + date.getMonth().toString() + '/' + date.getFullYear().toString();
    }

}

¿pero recibo un error que dice date.getDay() no es una función? Cuando miro la documentación, es un número, de ahí el .toString(). ¿Alguien se ha encontrado con esto o ha encontrado una mejor manera de implementar una forma de convertir una fecha a una cadena con un formato deseado?

-------------- Implementación completa ----------

<input class="form-control" placeholder="yyyy-mm-dd"
                           name="dp" ngbDatepicker #d="ngbDatepicker" [(ngModel)]="fromDate" (keyup)="setFilter()">

en componente

toDate: Date;
fromDate: Date;

constructor(private dateFormater: DataFormater) {
    this.toDate = new Date();
    this.fromDate = new Date();
}

setFilter() {    
        if (this.toDate != null) {
            console.log(this.toDate + " in toDate...");
            this.filter.toDate = this.dateFormater.formatDDMMMYYY(this.toDate);
        }
        if (this.fromDate != null) {
            this.filter.fromDate = this.dateFormater.formatDDMMMYYY(this.fromDate);
        }
        this.filterEmitter.emit(this.filter);
    }

DateFormater

export class DataFormater {

    constructor(){
        console.log(this.formatDDMMMYYY(new Date))
    }

    formatDDMMMYYY(date: Date): string {
        date = new Date(date);
        return date.getDay().toString() + '/' + date.getMonth().toString() + '/' + date.getFullYear().toString();
    }

}

Respuesta #1

Debes estar pasando la fecha a la función en un formato incorrecto.

Intenta así:

constructor(){
  console.log(this.formatDDMMMYYY(new Date))
}

formatDDMMMYYY(date: Date): string {
   return date.getDate().toString() + '/' + (date.getMonth()+1).toString() + '/' + date.getFullYear().toString();
}

Demostración Funcional

Nota: Dado que deseas convertir id a DD/MM/AAAA, usa date.getDate() en lugar de date.getDay(). date.getDay() da el día de la semana. 5 para viernes (domingo significa 0)

Respuesta #2

El objeto date sobre el que estás llamando la función getDate() podría no ser un objeto date válido. Por lo tanto, podrías estar recibiendo el error.

Una vez enviado un objeto de fecha válido y verifica esa función,

Ej :

this.formatDDMMMYYY(new Date());

Respuesta actualizada, según la pregunta:

Cambia esta parte, new Date(this.fromDate)

this.filter.fromDate = this.dateFormater.formatDDMMMYYY(new Date(this.fromDate));
setFilter() {    
        if (this.toDate != null) {
            console.log(this.toDate + " in toDate...");
            this.filter.toDate = this.dateFormater.formatDDMMMYYY(this.toDate);
        }
        if (this.fromDate != null) {
            this.filter.fromDate = this.dateFormater.formatDDMMMYYY(new Date(this.fromDate));
        }
        this.filterEmitter.emit(this.filter);
    }

DateFormater

export class DataFormater {

    constructor(){
        console.log(this.formatDDMMMYYY(new Date))
    }

    formatDDMMMYYY(date: Date): string {
        return date.getDate().toString() + '/' + date.getMonth().toString() + '/' + date.getFullYear().toString();
    }

}

Artículos relacionados