Firestoreで作成したドキュメントのタイムスタンプを取得しようとしていますが、これは次のとおりです。
myService.ts
getDomiciliarios() {
this.domiciliarios = this.afs.collection('domiciliarios').snapshotChanges().map(actions => {
return actions.map(a => {
const data = a.payload.doc.data() as Domiciliario;
const id = a.payload.doc.id;
const date = firebase.firestore.FieldValue.serverTimestamp();
return { id, ...data, date };
});
});
return this.domiciliarios;
}
myComponent.ts
ngOnInit() {
const domiciliarios = this.fs.getDomiciliarios()
.subscribe(data => this.dataSource.data = data, date => date);
}
myComponent.html
<ng-container matColumnDef="fecha">
<mat-header-cell *matHeaderCellDef mat-sort-header> Fecha </mat-header-cell>
<mat-cell *matCellDef="let domiciliario"> {{ domiciliario.date }} </mat-cell>
</ng-container>
そのタイムスタンプを印刷するにはどうすればよいですか?
firebase.firestore.FieldValue.serverTimestamp()
の日付値が必要な場合は、.toDate()
を使用できます。 FireStore Timesteamp を参照してください。あなたの場合、テンプレートではdomiciliario.date.toDate()
になります。
私はあなたがFieldValue.serverTimestamp()
を間違った方法で使用していると思います:ドキュメントが述べるように、_firebase.firestore.FieldValue
_メソッドは「書き込み時に使用できる値を返しますset()またはupdate()を使用したドキュメントフィールド。 ( https://firebase.google.com/docs/reference/js/firebase.firestore.FieldValue を参照)
データの読み取り中にserverTimestamp()
メソッドを使用しています。
質問の最後にあるように、データベースのレコードを作成するときに使用する必要があります。
編集:次のようにしてください:
_const timestamp = firebase.firestore.FieldValue.serverTimestamp();
docRef.update({ updatedAt: timestamp });
_
次のようにクエリできます
_collectionRef.orderBy('updatedAt').get()
.then(snapshot => {
snapshot.forEach(doc => {
...
});
})
.catch(err => {
console.log('Error getting documents', err);
});
_
上記のコードは純粋なJavaScriptであり、angularおよびタイプスクリプトに適合させることができますが、考え方は同じです。
現在の日付をタイムスタンプとして使用したい場合は、以下を使用できます
Firebase関数の場合
import admin = require('firebase-admin');
const todayAsTimestamp = admin.firestore.Timestamp.now()
ローカルプロジェクトの場合
import { Timestamp } from '@google-cloud/firestore';
const myTimestampAsDate = Timestamp.now()
タイムスタンプの実装場所に重点を置いた@Renaudのおかげで、Firestoreでレコードを作成するときにそうする必要があります。私の場合、formGroupを使用しているので、コードは次のようになります。
forma: FormGroup;
constructor( fb: FormBuilder) {
this.forma = fb.group ({
field1: [ ''],
field2: [ ''],
...
myDate: [ firebase.firestore.FieldValue.serverTimestamp() ],
});
}
この代替手段も機能しますが、これはクライアントのコンピューター(ユーザーのブラウザー)の現在の時刻であることを覚えておいてください。
forma: FormGroup;
constructor( fb: FormBuilder) {
this.forma = fb.group ({
field1: [ ''],
field2: [ ''],
...
myDate: [ new Date() ],
});
}