如何将日期类型与保存在Firebase数据库中的时间戳进行比较?

时间:2019-09-28 00:31:03

标签: typescript firebase google-cloud-firestore angularfire2

我在Firebase上保存了学生状态。有了这个,我有了一个旅行屏幕,开始时应该过滤与旅行日期相同的存在。但是当我给console.log()时,它什么也不会打印。如何将Firebase日期属性(时间戳)与日期属性进行比较?

this.presencaSubscription = this.viagemService.carregarAlunosPorDataConfirmacao(this.data).subscribe(dados => {
      this.presencas = dados;
      console.log(this.presencas)

在服务中

carregarAlunosPorDataConfirmacao(data: Date) {
    return this.firestore.collection<Presenca>('presenca', ref => ref.where('startTime', '==', data)).snapshotChanges().pipe(
      map(dados => {
        return dados.map(snap => {
          const data = snap.payload.doc.data();
          const uid = snap.payload.doc.id;
          return { uid, ...data };
        })
      })
    )
  }

1 个答案:

答案 0 :(得分:0)

Firestore以微秒的精度存储date/time values as timestamps。除非您小心存储标准化为特定微秒偏移的那些值(不幸的是,您没有在问题中显示这些值),否则两个Date值不可能完全相同(对于==比较成功)。

处理日期的两种最常见的方法是:

  1. 将时间戳存储为四舍五入到特定的粒度。因此,如果您需要按日期进行选择,则可以将时间戳存储在世界标准时间午夜(0:00.000),并与之进行比较。对于开始时间,通常会四舍五入到最接近的精确分钟/小时。
  2. 使用范围比较来获取属性文档,因此选择startTime2019-09-28T09:00:00.000Z之间具有2019-09-28T09:00:59.999Z的任何文档。