web-dev-qa-db-fra.com

Date du tube Angular "Impossible de convertir" Horodatage "

J'essaie d'utiliser un tuyau en angulaire, en particulier ce qui suit: {{fechaCreacion | date: 'medium'}} Et j'obtiens l'erreur suivante: Unable to convert Timestamp (seconds = 1528157765, nanoseconds = 878000000)" into a date 'for pipe' DatePipe'

Ceci est mon inscription dans Firestore: enter image description here

Lorsque je quitte juste {{ fechaCreacion }}, Cela me montre ce qui suit:

enter image description here

Comment puis-je résoudre cela?

J'utilise:

Angulaire 6

"angularfire2": "^ 5.0.0-rc.10"

"firebase": "^ 5.0.4",

component.ts

  aviso: any = {};
  id;
  titulo;
  descripcion;
  fechaCreacion;
  categoria;

  constructor( private fs: FirebaseService, private activatedRoute: ActivatedRoute) { }

  ngOnInit() {
    this.id = this.activatedRoute.snapshot.params['id'];
    this.fs.getAvisoObject(this.id).valueChanges().forEach(aviso => {
      this.titulo= aviso.titulo,
      this.descripcion = aviso.descripcion,
      this.fechaCreacion = aviso.fechaCreacion,
      this.categoria = aviso.categoria
    });
  }

component.html

<mat-card class="px-3 px-md-5 py-3 py-md-4 rounded">
    <div class="row no-gutters small pb-2 mb-3 d-flex justify-content-between border-bottom text-muted">
      <div>
        <span>{{ categoria }}</span>
      </div> 
      <div>
        <span>{{ fechaCreacion | date : 'medium' }}</span>
      </div>
    </div>
    <h2 class="font-weight-bold">{{ titulo }}</h2>
    <h5 class="font-weight-light">{{ descripcion }}</h5>
  </mat-card>

service.ts

getAvisoObject(id: string) {
this.avisoObject = this.afs.doc('avisos/' + id);
return this.avisoObject;
}
4
Paco Zevallos

Lorsque vous traitez des données de type horodatage dans Firestore (c'est votre champ fechaCreacion dans le document illustré), les bibliothèques clientes Firestore vous donneront un objet de type Timestamp en réponse aux requêtes. Vous devez utiliser cet horodatage pour formater une date à afficher dans le navigateur.

L'horodatage représente les temps avec une précision en nanosecondes, ce qui implique deux entiers, que vous voyez à l'écran. Si vous voulez un objet Date JavaScript à la place, vous pouvez utiliser la méthode toDate () sur cet horodatage pour le convertir, ou tout ce dont vous avez besoin pour le rendre à l'écran.

7
Doug Stevenson

Vous devez appeler toDate() pour convertir un horodatage Firebase en un objet Javascript Date avant votre pipe, par exemple:

{{ creationDate.toDate() | date: 'medium' }}

11
Denes Papp

Timestamp (seconds = 1528157765, nanoseconds = 878000000) n'est pas un horodatage valide. Il serait préférable que le backend utilise par exemple le format de temps ISO insteed de toString()

1
Antoniossss

enter image description here

_<ion-col size="4" class="top-center" item-end>
  <ion-label class="second-col second-col-color text-align-right">{{ud.date.toDate() | date: 'dd/MM/yyyy'}}</ion-label>
</ion-col>_

Convertissez-le en toDate comme: date.toDate ()

1
Abdullah Pariyani