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

How to compare date type with a timestamp saved in Firebase database?

我在 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 };
        })
      })
    )
  }

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

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

  1. 将您的时间戳存储为向下舍入到特定粒度。因此,如果您需要按日期 select,例如,您可以在午夜 (0:00.000) utc 存储时间戳,并与这些时间戳进行比较。对于开始时间,您通常会四舍五入到最接近的精确 minute/hour.
  2. 使用范围比较来获取 属性 个文档,因此 select 在 2019-09-28T09:00:00.000Z2019-09-28T09:00:59.999Z 之间具有 startTime 的任何文档。