【问题标题】:Retrieve data from firebase by using current date as a condition使用当前日期作为条件从 firebase 检索数据
【发布时间】:2020-04-13 01:40:03
【问题描述】:

我需要通过将当前日期与我的 firestore 数据库中名为 start date 的属性进行比较来检索数据。 我只需要检索与当前日期值与开始日期匹配的数据。 我创建了一个查询来检索数据,但我无法使用该查询检索任何数据。

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 是开始日期变量,我在其中检查开始变量是否等于当前日期变量,如果是则返回这些事件,否则没有当前日期事件。 但是我写的代码即使在数据库中有数据时也不会获取任何数据。

【问题讨论】:

    标签: javascript angular google-cloud-firestore angularfire2


    【解决方案1】:

    当您在 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)
      

    【讨论】:

    • 谢谢,我试试看
    猜你喜欢
    • 2019-08-07
    • 2019-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多