web-dev-qa-db-ja.com

Firestoreのタイムスタンプを取得する方法

Firestoreで作成したドキュメントのタイムスタンプを取得しようとしていますが、これは次のとおりです。

enter image description here

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>

そのタイムスタンプを印刷するにはどうすればよいですか?

8
Paco Zevallos

firebase.firestore.FieldValue.serverTimestamp()の日付値が必要な場合は、.toDate()を使用できます。 FireStore Timesteamp を参照してください。あなたの場合、テンプレートではdomiciliario.date.toDate()になります。

11
Papa Kojo

私はあなたが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およびタイプスクリプトに適合させることができますが、考え方は同じです。

7
Renaud Tarnec

現在の日付をタイムスタンプとして使用したい場合は、以下を使用できます

Firebase関数の場合

import admin = require('firebase-admin');

const todayAsTimestamp = admin.firestore.Timestamp.now()

ローカルプロジェクトの場合

import { Timestamp } from '@google-cloud/firestore';

const myTimestampAsDate = Timestamp.now()
1
Ruan

タイムスタンプの実装場所に重点を置いた@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() ],
  });
}
0
Paco Zevallos