Сохранение полей времени, но изменение часового пояса с помощью moment.js

У меня есть объект момента, к которому мне нужно применить часовой пояс, но без изменения значений поля часа или минуты. Например, если мой момент содержит дату «2013-10-10T15:00:00+00:00», я хочу иметь возможность изменить зону на «Америка/Лос-Анджелес», чтобы при печати момента я получал «2013». -10-10T15:00:00-07:00'

(для тех из вас, кто знаком с Joda, мне нужна функциональность withZoneRetainFields())

Вот jsfiddle с базовой настройкой, показывающий проблему. Как я могу изменить последний элемент, чтобы он давал желаемый результат?


person Community    schedule 04.11.2013    source источник
comment
Я не уверен, почему вы хотите, чтобы он переместился с 15:00 на 16:00. Это опечатка? Если вы просто ищете способ построить время, которое уже находится в этом часовом поясе, см. мой ответ на аналогичный вопрос здесь   -  person Matt Johnson-Pint    schedule 05.11.2013
comment
Извиняюсь за ошибку, да, должно быть 15:00, а не 16:00. Я обновил вопрос, а также обновил скрипку, чтобы предоставить потенциальное решение. Учитывая, что упомянутое вами изменение еще не выпущено, порекомендуете ли вы это как лучший способ сделать это тем временем?   -  person    schedule 05.11.2013


Ответы (1)


Я рекомендую изучить библиотеку moment-timezone.js для управления часовыми поясами. Он предлагает интересную функцию .zone() для управления часовыми поясами в объекте моментальной даты.

Я включил ссылку на соответствующую проблему с проблемами GitHub moment.js:

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

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

// Takes a moment.js date object, and converts
// it to UTC timezone, while maintaining the 
// selected hour/mins of the input date.
function convertDateToUTC (date){

    // Current timezone's offset. Minutes offset from UTC
    var offset = date.utcOffset();

    // Convert selected date to UTC
    date = date.utc();

    // Adjust the time to.
    date.add(offset, "minutes");

    return date;
};
person Alex Johnson    schedule 02.12.2015