【问题标题】:How to compare date type with a timestamp saved in Firebase database?如何将日期类型与保存在 Firebase 数据库中的时间戳进行比较?
【发布时间】:2020-01-28 05:59:28
【问题描述】:

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

【问题讨论】:

  • 我在下面回答了一个有根据的猜测。如果这不能帮助您解决问题,请更新您的问题,以便我们更轻松地提供帮助,方法是包含所有变量的硬编码值(主要是 data),通过显示您想要的文档的屏幕截图期望被返回(以便我们可以检查startTime),并消除对map 操作的需要,甚至可能是AngularFire(我希望您在使用常规JavaScript SDK 时也会遇到同样的问题)。

标签: typescript firebase google-cloud-firestore angularfire2


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2018-12-30
    • 1970-01-01
    • 2017-10-09
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 1970-01-01
    相关资源
    最近更新 更多