使用当前日期作为条件从 firebase 检索数据
Retrieve data from firebase by using current date as a condition
我需要通过将当前日期与我的 firestore 数据库中的 属性 命名开始日期进行比较来检索数据。
我只需要检索与当前日期值与开始日期相匹配的数据。
我创建了一个查询来检索数据,但我无法使用该查询检索任何数据。
event.model.ts
export interface Events{
title:String;
start:Date;
end:Date;
}
app.component.ts
event$:Observable<Events[]>;
const newDate = firebase.firestore.Timestamp.fromDate(new Date()).toDate();
this.event$ = this.firestore.collection<Events>('eventsCalender',
ref => ref.where('start','==',newDate)).valueChanges();
this.event$.subscribe(data => console.log(data));
我已经创建了一个接口并导出了,并且在 app.component.ts 中实现了检索事件的查询。 start 是开始日期变量,我检查开始变量是否等于当前日期变量,如果是 return 那些事件,否则没有当天事件。
但是我写的代码即使数据库中有数据也没有获取数据。
当您在 Firestore 中存储日期时,它以微秒粒度存储。当您在 JavaScript 中创建 new Date()
时,它具有毫秒级的粒度。在不同时刻创建的两个这样的日期完全相等的可能性非常小。
您通常需要执行以下操作之一:
- 存储所有四舍五入到特定粒度的日期。例如:如果您只想存储日期而不是时间,您可以确保将所有日期字段存储为该日期的午夜。然后在您的查询中,您可以:
var newDate = new Date(); newDate.setHours(0,0,0,0);
将午夜与午夜进行比较。
查询范围。例如:要获取所有开始日期为今天的字段,您可以这样做:
var startOfToday = new Date();
startOfToday.setHours(0,0,0,0);
var endOfToday = new Date();
endOfToday.setHours(23,59,59,999);
ref.where('start','>=',startOfToday).where('start', '<=', endOfToday)
我需要通过将当前日期与我的 firestore 数据库中的 属性 命名开始日期进行比较来检索数据。 我只需要检索与当前日期值与开始日期相匹配的数据。 我创建了一个查询来检索数据,但我无法使用该查询检索任何数据。
event.model.ts
export interface Events{
title:String;
start:Date;
end:Date;
}
app.component.ts
event$:Observable<Events[]>;
const newDate = firebase.firestore.Timestamp.fromDate(new Date()).toDate();
this.event$ = this.firestore.collection<Events>('eventsCalender',
ref => ref.where('start','==',newDate)).valueChanges();
this.event$.subscribe(data => console.log(data));
我已经创建了一个接口并导出了,并且在 app.component.ts 中实现了检索事件的查询。 start 是开始日期变量,我检查开始变量是否等于当前日期变量,如果是 return 那些事件,否则没有当天事件。 但是我写的代码即使数据库中有数据也没有获取数据。
当您在 Firestore 中存储日期时,它以微秒粒度存储。当您在 JavaScript 中创建 new Date()
时,它具有毫秒级的粒度。在不同时刻创建的两个这样的日期完全相等的可能性非常小。
您通常需要执行以下操作之一:
- 存储所有四舍五入到特定粒度的日期。例如:如果您只想存储日期而不是时间,您可以确保将所有日期字段存储为该日期的午夜。然后在您的查询中,您可以:
var newDate = new Date(); newDate.setHours(0,0,0,0);
将午夜与午夜进行比较。 查询范围。例如:要获取所有开始日期为今天的字段,您可以这样做:
var startOfToday = new Date(); startOfToday.setHours(0,0,0,0); var endOfToday = new Date(); endOfToday.setHours(23,59,59,999); ref.where('start','>=',startOfToday).where('start', '<=', endOfToday)