Как выполнять операции с данными, относящимися к часовому поясу, когда ваш сервер находится в другом часовом поясе? - PullRequest
0 голосов
/ 15 октября 2018

У меня проблемы с пониманием того, как серверы обрабатывают определенные часовые пояса операции и представляют локальную информацию пользователям.Я читал, что вам никогда не нужно хранить локальный часовой пояс пользователя, но вместо этого просто сохраняйте дату в метке времени со смещением UTC.

Так что, например, у меня есть пользователь, который находится в Калифорнии, но мой серверрасположен в Нью-Йорке.Я создаю приложение календаря, которое должно отображать все встречи, которые этот человек имеет на сегодняшний день с полуночи до полуночи включительно.Я запрашиваю базу данных для всех моих встреч, и сервер генерирует 2 даты, подобные этой:

let date_1 = moment().startOf('day').utc();
let date_2 = moment().endOf('day').utc();

Конечно, проблема заключается в том, что date_1 и date_2 сначала генерируются на основе времени Нью-Йорка, котороеНа 4 часа больше, чем в Калифорнии, поэтому даже если я выполню запрос типа: SELECT * FROM some_table WHERE somedate BETWEEN date_1 AND date_2;, я получу данные, которые по-прежнему не соответствуют запросам пользователя.

Разве я не должен знать часовой пояс человека или я должен построить API таким образом, чтобы клиент не мог просто запросить данные, но должен предоставить 2 даты?Неправильно ли серверу пытаться вычислить, сколько дней запрашивает пользователь?

1 Ответ

0 голосов
/ 15 октября 2018

Используйте значение timestamp для хранения в базе данных. Получить текущую метку времени .Поскольку значение временной метки всегда уникально и распространено, поэтому для получения правильного часового пояса вам необходимо обработать его во внешнем интерфейсе,

Date.now()
>> 1539606894329
new Date(1539606894329)
>> Mon Oct 15 2018 18:04:54 GMT+0530 (India Standard Time)

Преобразование одной и той же временной метки для другого часового пояса

...