firebase 如何获取firestore时间戳

vhmi4jdf  于 2023-03-19  发布在  其他
关注(0)|答案(4)|浏览(147)

我试图获取我在firestore中创建的文档的时间戳,但我得到的是这样的:

我的服务.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;
}

我的组件.ts

ngOnInit() {
const domiciliarios = this.fs.getDomiciliarios()
  .subscribe(data => this.dataSource.data = data, date => date);
}

我的组件.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>

我应该如何打印那个时间戳,我应该已经创建了它吗?

lymgl2op

lymgl2op1#

如果你想要firebase.firestore.FieldValue.serverTimestamp()的日期值,你可以使用.toDate()。参见FireStore Timesteamp。在你的例子中,它在你的模板中是domiciliario.date.toDate()

sz81bmfz

sz81bmfz2#

如果要将当前日期作为时间戳,可以使用以下命令

用于Firebase功能

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

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

用于当地项目

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

const myTimestampAsDate = Timestamp.now()
i2loujxw

i2loujxw3#

我认为您使用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 和类型脚本,但原理是相同的。*
m3eecexj

m3eecexj4#

感谢@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() ],
  });
}

相关问题