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

javascript date timezone momentjs

79686 просмотра

4 ответа

3072 Репутация автора

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

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

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

Автор: oliver Источник Размещён: 23.03.2015 09:10

Ответы (4)


116 плюса

155947 Репутация автора

Вам не нужно использовать момент-часовой пояс для этого. Основная библиотека 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");
Автор: Matt Johnson-Pint Размещён: 24.03.2015 06:59

1 плюс

1092 Репутация автора

Используйте функцию 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
Автор: Alexey Ryazhskikh Размещён: 11.05.2015 09:42

16 плюса

2224 Репутация автора

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
  1. Определите свой формат даты.
  2. Создайте объект момента и установите флаг UTC на true для объекта.
  3. Создайте локализованный объект момента, преобразованный из исходного объекта момента.
  4. Вернуть отформатированную строку из локализованного объекта момента.

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

Автор: AndrewHenderson Размещён: 10.12.2015 07:06

4 плюса

1196 Репутация автора

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

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

Где {{ time }}находится отметка времени utc.

Автор: sayan Размещён: 08.12.2017 11:32
Вопросы из категории :
32x32