如何将日期类型与保存在 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
值不太可能完全相同(这是需要的==
比较成功)。
像这样处理日期的两种最常见的方法是:
- 将您的时间戳存储为向下舍入到特定粒度。因此,如果您需要按日期 select,例如,您可以在午夜 (0:00.000) utc 存储时间戳,并与这些时间戳进行比较。对于开始时间,您通常会四舍五入到最接近的精确 minute/hour.
- 使用范围比较来获取 属性 个文档,因此 select 在
2019-09-28T09:00:00.000Z
和 2019-09-28T09:00:59.999Z
之间具有 startTime
的任何文档。
我在 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
值不太可能完全相同(这是需要的==
比较成功)。
像这样处理日期的两种最常见的方法是:
- 将您的时间戳存储为向下舍入到特定粒度。因此,如果您需要按日期 select,例如,您可以在午夜 (0:00.000) utc 存储时间戳,并与这些时间戳进行比较。对于开始时间,您通常会四舍五入到最接近的精确 minute/hour.
- 使用范围比较来获取 属性 个文档,因此 select 在
2019-09-28T09:00:00.000Z
和2019-09-28T09:00:59.999Z
之间具有startTime
的任何文档。