Как сравнить тип даты с отметкой времени, сохраненной в базе данных Firebase? - PullRequest
0 голосов
/ 28 сентября 2019

У меня есть сохраненное присутствие студентов в 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 };
        })
      })
    )
  }

1 Ответ

0 голосов
/ 28 сентября 2019

Firestore хранит значения даты / времени как метки времени с точностью до микросекунды.Если вы не позаботились о том, чтобы сохранить эти значения, нормализованные к определенному микросекундному смещению (которое, к сожалению, вы не указали в своем вопросе), маловероятно, что два значения Date будут точно такими же (что необходимо для == сравнение для достижения успеха).

Вот два наиболее распространенных подхода к работе с датами:

  1. Храните свои метки времени как округленные до определенной степени детализации.Поэтому, если вам нужно выбрать дату, вы, например, должны хранить метки времени в полночь (0: 00.000) utc, а также сравнивать их с этими.Для времени начала вы обычно округляетесь до ближайшей точной минуты / часа.
  2. Используйте сравнения диапазонов для получения документов свойств, поэтому выберите любые документы с startTime между 2019-09-28T09:00:00.000Z и 2019-09-28T09:00:59.999Z.
...