Как преобразовать дату Moment.js в локальный часовой пояс пользователей?
Я использую структуры Moment.js и Moment-Timezone и имею объект даты Moment.js, который явно находится в часовом поясе UTC. Как я могу преобразовать это в текущий часовой пояс браузера?
var testDateUtc = moment.tz("2015-01-30 10:00:00", "UTC");
var localDate = ???
Так что было бы хорошо, если бы я мог узнать локальный часовой пояс пользователей; или, наоборот, я хотел бы преобразовать объект даты в другой объект данных, который просто использует "локальный часовой пояс", независимо от того, что на самом деле есть.
Ответы
Ответ 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.