如何获取firestore时间戳

时间:2018-04-25 00:29:56

标签: angular typescript firebase google-cloud-firestore angularfire2

我正在尝试获取我在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>

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

4 个答案:

答案 0 :(得分:8)

如果您想要firebase.firestore.FieldValue.serverTimestamp()的日期值,可以使用.toDate()。 见FireStore Timesteamp。在您的情况下,模板中的内容为domiciliario.date.toDate()

答案 1 :(得分:2)

我认为您使用的是firebase.firestore.FieldValue错误的方式:正如文档所述,serverTimestamp()方法返回“使用set()编写文档字段时可以使用的值或更新()“。 (见https://firebase.google.com/docs/reference/js/firebase.firestore.FieldValue

您在阅读数据时使用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);
    });

然后您可以查询

class Sample1 {
private var test = ""
    get() = field
    set(value) {
        field = value
   }}

上面的代码是纯JavaScript,您可以将其改编为角度和类型脚本,但理念是相同的。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

const myTimeStampNow = Timestamp.now()

要从时间戳记获取日期,可以使用

const myTimestampAsDate = myTimeStampNow.toDate();