J'essaie d'afficher un horodatage Firebase dans la vue du modèle, malheureusement pas de chance avec le angular datePipe.
<p>Seen {{user.updatedAt | date: 'yyyy/MM/dd h:mm:ss a'}}</p>
Je reçois cette erreur:
ERROR Error: InvalidPipeArgument:
'Unable to convert "Timestamp(seconds=1528515928, nanoseconds=105000000)"
into a date' for pipe 'DatePipe
Essaye ça {{ user.updatedAt.seconds * 1000 | date:'MM-dd-yyyy' }}
, l'horodatage a une propriété seconds, vous devez donc y accéder, puis faire la multiplication et le pipe. J'espère que cela fonctionne pour votre cas.
Vous pouvez convertir l'horodatage en millisecondes ou en date:
<p>Seen {{user.updatedAt.toMillis() | date:'yyyy/MM/dd h:mm:ss a'}}</p>
ou
<p>Seen {{user.updatedAt.toDate() | date:'yyyy/MM/dd h:mm:ss a'}}</p>
J'utilise un tube personnalisé simple en Angular 7. Il prend en compte LOCALE_ID et vous pouvez également utiliser tous les formats DatePipe:
import {formatDate} from '@angular/common';
import {Inject, LOCALE_ID, Pipe, PipeTransform} from '@angular/core';
import {firestore} from 'firebase/app';
import Timestamp = firestore.Timestamp;
@Pipe({
name: 'firestoreDate'
})
export class FirestoreDatePipe implements PipeTransform {
constructor(@Inject(LOCALE_ID) private locale: string) {
}
transform(timestamp: Timestamp, format?: string): string {
return formatDate(timestamp.toDate(), format || 'medium', this.locale);
}
}
L'heure indiquée est l'horodatage et non la date réelle. vous devez multiplier le temps par 1000.
<p>Seen {{user.updatedAt * 1000 | date:'MM-dd-yyyy'}}</p>
Au lieu de yourDate: Date
utilisation yourDate: Timestamp
de '@firebase/firestore-types';
la pipe Date prendra un certain nombre de millisecondes depuis UTC Epoch. https://angular.io/api/common/DatePipe . L'horodatage Firebase fournit des secondes et des fractions de secondes en temps d'époque UTC. J'utilise...
new Date(0).setUTCSeconds(YOURFIREBASEDOC.updatedAt['seconds'])
Vous pouvez capturer toutes les propriétés d'horodatage de votre service et les convertir toutes à ce jour.
Par exemple:
import { firestore } from 'firebase/app';
import Timestamp = firestore.Timestamp;
@Injectable()
export class YourService {
....
list = (): Observable<any[]> => this.collection
.snapshotChanges()
.pipe(
map(changes => {
return changes.map(a => {
const data = a.payload.doc.data() as any;
Object.keys(data).filter(key => data[key] instanceof Timestamp)
.forEach(key => data[key] = data[key].toDate())
data._id = a.payload.doc.id;
return data;
});
})
);
...
}
Prenez à jourA: n'importe quel modèle en vous.
import { DatePipe } from '@angular/common';
export class class1 implements OnInit {
constructor(private datePipe: DatePipe) { }
youMethod() {
let aNewDate = this.datePipe.transform(user.updatedAt.toDate(),"medium");
console.log(aNewDate)
// This will print in format Jun 5, 2018, 5:45:31 PM
}
}
Vous pouvez utiliser n'importe quel format de date en place ("moyen") pour afficher votre variable de date.