Получать записи пожарного магазина на основе объекта Date - PullRequest
0 голосов
/ 20 апреля 2019

Я создал поле create_date в Firestore как Азия / Калькутта часовой пояс.

Но когда я выполняю приведенный ниже запрос, не удается получить запись, показанную на снимке экрана.enter image description here

let start_date = new Date().toLocaleString("en-US", {timeZone: "Asia/Kolkata"});
start_date = new Date(start_date);
let end_date = new Date().toLocaleString("en-US", {timeZone: "Asia/Kolkata"});
end_date = new Date(end_date);
start_date.setDate(start_date.getDate() - 1);
start_date.setHours(0, 0, 0, 0);
end_date.setHours(0, 0, 0, 0);
admin.firestore().collection('feed')
      .orderBy('created_date')
      .where('created_date', '>', start_date)
      .where('created_date', '<', end_date)

Примечание: Это работает в firebase-функциях.

1 Ответ

0 голосов
/ 20 апреля 2019

JavaScript Date и Firestore Timestamp объекты не имеют понятия часового пояса. То, что вы видите в консоли Firebase (или когда вы записываете значение с помощью console.log ()), является просто вашим локальным часовым поясом. Объект Date на самом деле представляет собой просто одно число, а метка времени - это просто два числа, которые представляют собой смещение от эпохи Unix. Момент времени, представленный этим смещением, одинаков для всех людей во всем мире.

Поскольку в этих объектах нет кодированных часовых поясов, то, что вы делаете, преобразовывая Date в строку, затем снова возвращаетесь к Date, не делают то, что вы думаете. Если вы хотите закодировать объект Date с использованием часового пояса, это нормально. Это поможет объекту Date выяснить точный момент времени. Но эта информация о часовом поясе потеряна.

К вашему сведению, вам не нужно преобразовывать дату в метку времени, чтобы использовать ее в запросе. Вы можете просто передать объект Date напрямую, и Firestore SDK автоматически преобразует его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...