Я работаю над проектом React.js, который обрабатывает множество сравнений, связанных с DateTime (сравнение часа, месяца, года и т. Д. С датами, полученными из API).Для этого конкретного приложения React.js я хотел бы всегда рассматривать DateTimes (от new Date()
), как если бы пользователь находился в часовом поясе сервера.Предполагая, что сервер находится в часовом поясе "Европа / Берлин", я хотел бы, чтобы в любой точке приложения вызов new Date('2019-01-01')
возвратил бы мне DateTime, который ссылается на это время в часовом поясе "Европа / Берлин", который был быTue Jan 01 2019 01:00:00 GMT+0100 (Central European Standard Time)
.Например, если я установлю дату и время на своем компьютере, как если бы я был в Бразилии, я получу Mon Dec 31 2018 22:00:00 GMT-0200 (Brasilia Summer Time)
, но хотел бы получить то же, что и раньше.Основная причина, по которой это является проблемой, заключается в том, что мы извлекаем данные из этих DateTimes, таких как .getHours()
, .getDate()
и т. Д.
Это подходит для этого конкретного приложения, поскольку для этого проекта очень важно, чтобы мы толькоПоддержка сервера Timezone, независимо от того, где находится пользователь.Таким образом, чтобы соответствовать времени сервера, вызов new Date('2019-01-01').getDate()
должен вернуть 1
, так как это будет 1 января в Берлине.Однако, если пользователь находится в Бразилии, этот же вызов вернет 31
, так как Бразилия за несколько часов до GMT, когда в полночь по времени GMT, это будет все еще предыдущий день в Бразилии.
IСначала попытался использовать date-fns
вместе с date-fns-timezone
, чтобы установить DateTime для отображения даты и времени для клиента с учетом часового пояса сервера.Это работало нормально для отображения правильных данных, но не решало некоторые проблемы, вызванные извлечением этих атрибутов из даты, и это будет зависеть от того, где находится пользователь.
Так вот почему яПопытка сделать это переопределить метод new Date()
таким образом, что он всегда будет извлекать дату, как если бы пользователь был на сервере времени.Мне не удалось понять, как это можно сделать.Всякий раз, когда я изменяю дату и время с моего компьютера, вывод для new Date()
уже учитывает эти новые настройки даты и времени.
Так как же заставить new Date()
всегда возвращать DateTime с жестко заданным часовым поясом?Кроме того, было бы очень хорошо, если бы я мог сделать это без использования внешних библиотек (например, moment.js) и делать это только с простым Javascript.
Я смотрел на window.navigator
переменная, чтобы увидеть, смогу ли я установить этот параметр для принудительной установки даты в часовой пояс сервера, но, похоже, это не будет решением моей проблемы.
Я много искал этот ответ и не сталне нашел ни одного вопроса, который был бы действительно близок к этому.Я просто перечислю здесь некоторые вопросы, которые я рассматривал ранее, и почему мой случай отличается от них.
1- new Date () для определенного часового пояса в JavaScript : в этом случаеmoment
используется, и не было никакого способа выполнить это переопределение для самого new Date()
.
2- Преобразовать строку в дату без учета часового пояса : в этомanswer возвращает строку с датой, отформатированной в желаемом часовом поясе, но не с самим объектом Date.
3- дата javascript с учетом Request.UserLanguages [0] : также в этом,вопрос / ответ касается форматирования вывода даты, а не извлечения самого объекта Date с новым часовым поясом.
4- Как объединить часовой пояс moment.js с toDate для создания нового объекта даты?: в этом ответ также об использовании moment.js
, чего я бы хотел избежать, поскольку я действительно хочу добиться переопределения метода new Date()
.