2014-12-26 3 views
0

Я использую Momentjs и Momentjs Timezone для обработки дат/часовых поясов.Получить Parseable Часовой пояс

Я пытаюсь получить дату, которая вводится пользователем в определенный часовой пояс и преобразовывать его в локальное время в свой часовой пояс. Это не похоже на то, что временная библиотека Moment поддерживает формат new Date().getTimezoneOffset() для установки часового пояса.

function calculateLocalTime(e) { 
    var currentTz = new Date().getTimezoneOffset(), 
     fromDate = moment.tz(this.value, 'GMT'), 
     toDate = fromDate.tz(currentTz); 

    $('to-time').val(toDate.format(dateFormat)); 
} 

Я также попытался извлечь временную зону на три буквы от нормального Date объекта, а также, но это, кажется, не поддерживается либо.

function calculateLocalTime(e) { 
    var currentTz = new Date().toString().split(' ').pop().replace(/\(/gi, '').replace(/\)/gi, ''), 
     fromDate = moment.tz(this.value, 'GMT'), 
     toDate = fromDate.tz(currentTz); 

    $('to-time').val(toDate.format(dateFormat)); 
} 

Любая идея о том, как я должен это делать с помощью Moment?

ответ

1

Moment-timezone предназначен для работы со стандартными идентификаторами от IANA TZ Database, таких как America/Los_Angeles.

Moment.js поддерживает зоны фиксированного смещения, не зависит от момента времени, используя функцию zone.

var m = moment(); 

// All of the following are equivalent 
m.zone(480);  // minutes east of UTC, just like Date.getTimezoneOffset() 
m.zone(8);   // hours east of UTC 
m.zone("-08:00"); // hh:mm west of UTC (ISO 8601) 

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

Вот полный пример, преобразование из явной временной зоны IANA для локального часового пояса пользователя:

// Start at noon, Christmas Day, on Christmas Island (in the Indian Ocean) 
var m = moment.tz('2014-12-25 12:00:00', 'Indian/Christmas'); 

// Convert to whatever the user's local time zone may be 
m.local(); 

// Format it as a localized string for display 
var s = m.format('llll'); 

Для меня это работает в часовом поясе США Тихого океана, я получаю "Wed, Dec 24, 2014 9:00 PM". Результат будет зависеть от того, где выполняется код.

+0

Это действительно работало, спасибо! –

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