2016-04-27 1 views
0

У меня есть локальное время, хранящееся в mongodb, например. «2016-04-25T09: 30: 00.000Z» Он сохраняется как «UTC» (Z в конце), но на самом деле это буквальное представление местного времени. У меня также сохранен часовой пояс, например. «Европа/Лондон», поэтому у меня есть вся информация, которую мне нужно преобразовать в правильное время utc.Как преобразовать местное время, сохраненное как UTC, к фактическому правильному значению UTC

В этом случае результат должен быть «2016-04-25T08: 30: 00.000Z», но я не могу найти способ, как это сделать. Я пробовал момент-время.

ответ

0

Найденный!

var start = "2016-04-25T09:30:00.000Z"; 
var timezone = 'Europe/London'; 
var mZoned = moment.tz(start, timezone); 
var mStart = moment.utc(start); 
var correctedStart = moment.utc(1000*(mStart.unix() - (mZoned.utcOffset()*60))); 
2

Существует гораздо более легкий и менее подверженный ошибкам способ, чем у вас там. Просто разобрать дату с форматом, который игнорирует Z в конце:

moment.tz("2016-04-25T09:30:00.000Z", 'YYYY-MM-DDTHH:mm:ss:SSS', 'Europe/London').format() 
"2016-04-25T09:30:00+01:00" 

Дата, будучи корректно распознаны, получить дату в формате UTC является простым вызовом .toISOString()

moment.tz("2016-04-25T09:30:00.000Z", 'YYYY-MM-DDTHH:mm:ss:SSS', 'Europe/London').toISOString() 
"2016-04-25T08:30:00.000Z" 

Примечание что если это локальная дата, независимо от часового пояса, вы можете опустить идентификатор часового пояса и просто использовать местное время браузера:

moment("2016-04-25T09:30:00.000Z", 'YYYY-MM-DDTHH:mm:ss:SSS').format() 
"2016-04-25T09:30:00-05:00" 

Но я думаю, что вы используя Node, чтобы второй, возможно, не тот, который вы хотите.

+0

Спасибо за подсказку @Maggie! – matus

1

Я действительно считаю, что проблема заключается в формате, который указывает 000Z зону для момента lib. В нем говорится, что это уже UTC 0, а часовой пояс = «Европа/Лондон» в этом случае игнорируется.

moment.utc(moment(start).tz(timezone)).format() 

работает правильно с форматом даты "2016-04-25T09:30:00". Проверить доступную версию here