Извлечь данные из FireBase, используя текущую дату в качестве условия - PullRequest
0 голосов
/ 13 апреля 2020

Мне нужно получить данные, сравнив текущую дату со свойством с именем start date в моей базе данных 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 - переменная даты начала, где я проверяю, равна ли переменная start текущей переменной даты, если это так, возвращает те события, в которых нет событий текущего дня. Но код, который я написал, не получает никаких данных, даже если в базе данных есть данные.

1 Ответ

1 голос
/ 13 апреля 2020

Когда вы сохраняете дату в Firestore, она сохраняется с микросекундной детализацией. Когда вы создаете new Date() в JavaScript, он имеет гранулярность в миллисекундах. Вероятность того, что две такие даты, созданные в разные моменты времени, абсолютно одинаковы, очень мала.

Как правило, вы захотите сделать одну из них:

  • Сохраните все даты, округленные до определенная зернистость. Например: если вы хотите сохранить только дату, а не время, вы можете сохранить все поля даты как полночь этой даты. Тогда в вашем запросе вы можете сделать: 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)
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...