如何获取firestore时间戳

Pac*_*los 3 firebase typescript angularfire2 angular google-cloud-firestore

我正在尝试获取我在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;
}
Run Code Online (Sandbox Code Playgroud)

myComponent.ts

ngOnInit() {
const domiciliarios = this.fs.getDomiciliarios()
  .subscribe(data => this.dataSource.data = data, date => date);
}
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

如果我之前创建了时间戳,我该如何打印该时间戳?

Ren*_*nec 14

我认为您使用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 });
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样查询

collectionRef.orderBy('updatedAt').get()
    .then(snapshot => {
        snapshot.forEach(doc => {
            ...
        });
    })
    .catch(err => {
        console.log('Error getting documents', err);
    });
Run Code Online (Sandbox Code Playgroud)

上面的代码是纯 JavaScript,您可以将其调整为 angular 和 type 脚本,但原理是相同的。


Pap*_*ojo 11

如果你想要firebase.firestore.FieldValue.serverTimestamp()你可以使用的日期值.toDate().请参阅FireStore Timesteamp.在您的情况下,它将domiciliario.date.toDate()在您的模板中.


Rua*_*uan 11

如果您希望当前日期作为时间戳,您可以使用以下内容

对于 Firebase 函数

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

const todayAsTimestamp = admin.firestore.Timestamp.now()
Run Code Online (Sandbox Code Playgroud)

对于本地项目

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

const myTimestampAsDate = Timestamp.now()
Run Code Online (Sandbox Code Playgroud)

  • 这将返回用户的本地日期时间。如果用户的日期/时间错误,您将得到错误的日期/时间 (2认同)