2016-11-03 1 views
11

Что такое лучший способ получить временную зону клиента и преобразовать его в какой-то другой часовой пояс при использовании moment.js и момент-timezone.jsПолучить временную зону от пользователей браузера, используя момент (часовой пояс) .js

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

Есть ли у кого-нибудь опыт?

ответ

5

var timedifference = new Date(). GetTimezoneOffset();

Это возвращает разницу между часовым поясом клиентов от UTC. Затем вы можете поиграть с ним, как хотите.

+11

Это возвращает * текущий * часовой пояс * смещение *. Не часовой пояс. Смещение может измениться, основываясь на таких вещах, как переход на летнее время. См. «Часовой пояс! = Смещение» в [вики wiki часового пояса] (http://stackoverflow.com/tags/timezone/info) –

+1

@ Ответ MattJohnson - это верный ответ на этот вопрос. Технически этот ответ неверен, поскольку он связан с корреляцией, а не связан с часовым поясом (разные понятия). – dudewad

48

При использовании moment.js используйте:

var tz = moment.tz.guess(); 

Он возвращает время идентификатор зоны IANA, например America/Los_Angeles для часового пояса США Тихого океана.

Это documented here.

+0

См. Также [этот ответ] (http://stackoverflow.com/a/16526897/634824) и [этот ответ] (http://stackoverflow.com/a/18252251/634824). –

+1

Отличный ответ - upvoted! Также, пожалуйста, используйте версию 'momet-timezone' ** 0.5.4 ** или выше ... пожалуйста, следуйте этой теме для дальнейших объяснений. Https://github.com/moment/moment-timezone/issues/324 – ymz

+0

+1. Убедитесь, что вы используете момент с датой, чтобы использовать tz-крючок. https://momentjs.com/timezone/docs/, чтобы установить его с помощью node.js, используйте эту команду «npm install moment-timezone», после чего потребовалось это как «window.moment = require (« момент-часовой пояс »);' –

0

Примечание moment(date).offsetUtc() возвращает разницу во времени в минутах между временем и UTC браузера на дату, переданного в качестве аргумента. Один НЕ должны установить эту разницу в глобальном масштабе и использовать его для всех дат, если они находятся в зоне перехода на летнее:

// this is WRONG in daylight saving zones. don't do this! 
const OFFSET_UTC = moment().offsetUtc(); 

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

Небольшая функция, которую я написал, чтобы разобрать разницу во времени в переходе на летнее зон правильно:

function toUtcMoment(date) { 
    return moment(date).add(moment(date).offsetUtc(), 'minutes').utc() 
} 

Вы можете использовать выше, чтобы правильно передать даты от datepickers (которые всегда в браузере часовой пояс) в приложение, которое использует часовой пояс UTC.

Смежные вопросы