Получение TimeZone клиента без использования обычной функции JavaScript 'getTimezoneOffset'? - PullRequest
0 голосов
/ 03 января 2019

В настоящее время я работаю над формой регистрации на сайте, и мне нужно точно знать, как получить смещение часового пояса для активного пользователя-клиента, чтобы вычислить его фактическое местное время (нет необходимости в летнем времени).

Я пробовал метод JS с использованием функции getTimeZoneOffset (), но кажется, что он не очень рекомендуется, потому что он полагается на пользовательские настройки времени. (Я изменил время на своей машине и попробовал)

Таким образом, любое изменение настроек времени пользователя будет изменять смещение часового пояса.

Существуют ли другие «надежные» и «заслуживающие доверия» методы, которые я могу реализовать, чтобы получить смещение часового пояса и затем применить его в моем коде C #.

Best.

1 Ответ

0 голосов
/ 03 января 2019

Здесь есть много чего расслабиться, поэтому я пойду по пунктам вашего вопроса:

... Мне нужно точно знать, как получить смещение часового пояса для активного пользователя ...

Вы не можете получить смещение часового пояса, вы можете получить только a смещение часового пояса. То есть смещение часового пояса, которое вы получаете, относится только к одному моменту времени. Часовые пояса проходят через переходы из-за изменений стандартного времени и перехода на летнее время. Когда вы вызываете getTimeZoneOffset для объекта JavaScript Date, этот Date объект представляет определенный момент времени (по умолчанию «сейчас»). Таким образом, возвращаемое смещение относится к конкретному моменту времени. Нет гарантии, что предыдущий момент времени или будущий момент времени будут использовать одно и то же смещение. Отправка смещения на сервер полезна только в том случае, если вы связываете его с этой конкретной отметкой времени (например, ведение журнала с использованием шаблона DateTimeOffset).

Читайте также, раздел «Часовой пояс! = Смещение» тег часового пояса вики .

... чтобы рассчитать его фактическое местное время ...

Вам не нужно рассчитывать это. new Date().toString() даст вам фактическое местное время пользователя. Если вам нужен вывод в определенном формате, вы можете использовать библиотеки, такие как Luxon , Date-fns , Moment.js и другие, или вы можете использовать функция как эта .

... (нет необходимости в DST).

Люди часто говорят это, потому что думают, что это устраняет сложности, но факт в том, что - , это не ваше дело . Применяется ли DST или нет (и когда), зависит от местного органа власти, который регулирует конкретный часовой пояс. Если летнее время применимо к местному времени вашего пользователя в указанное время, и если вы решите , а не , чтобы принять это во внимание, то ваши результаты будут (как правило) с перерывом в час.

К счастью, вся тяжелая работа для вас уже проделана. Многие люди усердно работают, чтобы обеспечить точность базы данных часовых поясов . Проще потратить их усилия, чем пытаться обойти их.

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

... getTimeZoneOffset() но похоже, что это не очень рекомендуется, потому что он полагается на пользовательские настройки времени. ...

То, что он зависит от пользовательских настроек времени, не является проблемой. Основная причина, по которой это не рекомендуется, заключается в проблеме «Часовой пояс! = Смещение», которую я уже описал. Если вы хотите знать часовой пояс пользователя , вам нужен идентификатор часового пояса, например "America/Los_Angeles", а не смещение 480.

... Таким образом, любое изменение настроек времени пользователя будет изменять смещение часового пояса.

Пользователь контролирует свой компьютер и может установить часовой пояс на все, что захочет. Обычно люди устанавливают часовой пояс на свое местное время, чтобы часы, которые они видят, были правильными. Нередко люди используют другие часовые пояса, например, если они работают за границей и хотят выровнять свой рабочий день с местным временем родительской компании (хотя лично я нахожу это отвратительным). В любом случае, это не то, что вы можете разумно контролировать.

... Существуют ли другие «надежные» и «заслуживающие доверия» методы, которые я могу реализовать, чтобы получить смещение часового пояса и затем применить его в моем коде C #.

Если вы хотите использовать местный часовой пояс пользователя, тогда используйте один из методов, перечисленных здесь .

Однако я не уверен, по каким критериям вы считаете "надежными и заслуживающими доверия". Нет ничего особенно ненадежного в вышеупомянутых методах ...

Одна вещь, которую вы могли бы рассмотреть, если вы на самом деле не хотите локальный часовой пояс пользователя *1088*, а скорее локальное время в определенном месте. Хотя они кажутся одинаковыми, они не всегда. Вы можете получить идентификатор местного часового пояса для местоположения, используя один из методов, перечисленных здесь .

...