#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 октября.