Запрос даты с составным интервалом Firestore

#typescript #google-cloud-firestore

#typescript #google-облако-firestore

Вопрос:

Я хочу получить все документы, в которых есть поле даты для текущей даты, например, 2020-10-02. Для этого я реализовал следующее:

 const todayStart = new Date();
todayStart.setHours(0, 0, 0, 0); // 2020-10-02T00:00:00.000Z
const todayEnd = new Date();
todayEnd.setHours(23, 59, 59, 0); // 2020-10-02T23:59:59.000Z 
console.log(todayStart)
console.log(todayEnd)
const querySnapshot = await firestore
      .collection("CourseEvents")
      .where("date", ">=", todayStart)
      .where("date", "<=", todayEnd)
      .get();
  

Это полуработающий. У меня есть документ со следующей временной меткой: 2 октября 2020 года в 12:00:00 UTC 2

По какой-то причине я не могу получить этот документ.

Какие-либо подсказки для этого случая?

Ответ №1:

Все временные метки внутренне представлены в UTC (это Z в конце строкового представления созданного вами объекта Date). Однако временные метки отображаются в консоли Firebase с использованием часового пояса вашего локального компьютера (в вашем случае это UTC 2). Итак, временная метка в документе, который вы видите в консоли, на самом деле на два часа опережает UTC, что выходит за пределы диапазона вашего запроса.

Вам придется либо скорректировать свой запрос, либо настроить временную метку в документе так, чтобы диапазон перекрывал то, что находится в документе.

Комментарии:

1. Может быть, я не понимаю, но означает ли это, что дата в документе — 2 октября 2020 года в 10:00:00 утра? Если это так, то оно должно быть в пределах диапазона, поскольку 00:00 <= 10:00 <=23:59

2. Нет, дата в документе указана 2 октября, 2 часа ночи по Гринвичу. Смещение 2 часа.

3. Вы имеете в виду 3 октября, 2 часа ночи? 02:00 также между 00:00 и 23:59 2 октября

4. Извините, два часа шли в неправильном направлении. 10 вечера 1 октября.