Подтвердить что ты не робот

Как преобразовать дату Moment.js в локальный часовой пояс пользователей?

Я использую структуры Moment.js и Moment-Timezone и имею объект даты Moment.js, который явно находится в часовом поясе UTC. Как я могу преобразовать это в текущий часовой пояс браузера?

var testDateUtc = moment.tz("2015-01-30 10:00:00", "UTC"); var localDate = ???

Так что было бы хорошо, если бы я мог узнать локальный часовой пояс пользователей; или, наоборот, я хотел бы преобразовать объект даты в другой объект данных, который просто использует "локальный часовой пояс", независимо от того, что на самом деле есть.

4b9b3361

Ответ 1

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

var testDateUtc = moment.utc("2015-01-30 10:00:00");
var localDate = moment(testDateUtc).local();

Оттуда вы можете использовать любую из функций, которые вы можете ожидать:

var s = localDate.format("YYYY-MM-DD HH:mm:ss");
var d = localDate.toDate();
// etc...

Обратите внимание, что, передав testDateUtc, который является объектом moment, обратно в конструктор moment(), он создает клон. В противном случае при вызове .local() он также изменит значение testDateUtc вместо значения localDate. Моменты изменяемы.

Также обратите внимание, что если ваш исходный вход содержит смещение часового пояса, например +00:00 или Z, вы можете просто проанализировать его непосредственно с помощью moment. Вам не нужно использовать .utc или .local. Например:

var localDate = moment("2015-01-30T10:00:00Z");

Ответ 2

var dateFormat = 'YYYY-DD-MM HH:mm:ss';
var testDateUtc = moment.utc('2015-01-30 10:00:00');
var localDate = testDateUtc.local();
console.log(localDate.format(dateFormat)); // 2015-30-01 02:00:00
  • Определите формат даты.
  • Создайте объект времени и установите для символа UTC значение true.
  • Создайте объект локализованного момента, преобразованный из исходного момента объект.
  • Возвращает форматированную строку из объекта локализованного момента.

Смотрите: http://momentjs.com/docs/#/manipulating/local/

Ответ 3

Используйте функцию utcOffset.

var testDateUtc = moment.utc("2015-01-30 10:00:00");
var localDate = moment(testDateUtc).utcOffset(10 * 60); //set timezone offset in minutes
console.log(localDate.format()); //2015-01-30T20:00:00+10:00

Ответ 4

Вот что я сделал:

var timestamp = moment.unix({{ time }});
var utcOffset = moment().utcOffset();
var local_time = timestamp.add(utcOffset, "minutes");
var dateString = local_time.fromNow();

Где {{ time }} - метка времени utc.