Как я могу игнорировать время или часовые пояса для объекта даты при сравнении его в .where? - PullRequest
0 голосов
/ 18 марта 2020

Мне нужно, чтобы документ был возвращен в .where("date" == selectedDate) за тот же день, когда он был выбран пользователем независимо от часовых поясов.

В настоящее время я сохраняю этот атрибут даты с часами, минутами и секундами, установленными в 0 (startOfDay используя date-fns). Если я нахожусь в одном часовом поясе, все документы, созданные с определенным date, будут точно соответствовать selectedDate. Однако, если я изменю часовой пояс, «startOfDay» date, созданного в часовом поясе, не будет соответствовать selectedDate другого часового пояса.

Как я могу игнорировать время, чтобы я мог соответствовать date с selectedDate?

Я сделал .where(date >= startOfSelectedDate).where(date <= endOfSelectedDate), и он возвращает документы из всех часовых поясов, если в тот же день (очевидно), но игнорирует некоторые случаи, когда даты (после преобразования) будут другими в разных часовых поясах, например, до c, созданный в Новой Зеландии, например, в Бразилии, отстает от Бразилии.

Для этого конкретного до c все, что меня волнует, это то, что дата соответствует в разных часовых поясах - думайте об этом как о повестке дня - если я напишу заметку 19 марта, не имеет значения, где я нахожусь, она всегда будет написана на странице 19 марта.

1 Ответ

2 голосов
/ 18 марта 2020

Объекты Timestamp и Date не имеют никакого понятия о часовом поясе, как и Firestore. Документы API JS для метки времени читаются:

Метка времени представляет собой момент времени, независимый от любого часового пояса или календаря, представленный в виде секунд и долей секунд с наносекундным разрешением в UT C Время эпохи.

SDK никак не поможет вам решить проблемы, связанные с часовым поясом. Это то, что вам нужно будет обработать в своем собственном коде. Ваш код должен будет определить часовой пояс для работы, а затем выполнить некоторую математическую обработку даты, чтобы преобразовать все в UT C, который Firestore (и почти все системы) использует для представления момента времени. Как только вы преобразовали время, зависящее от часового пояса, в UT C, вы можете использовать его для запроса.

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