Несколько вещей:
Ваш ввод представляет собой строку в нестандартном формате. Вероятно, вы получили его, взяв объект Date
и вызвав функцию .toString()
, но это не значит, что он подходит для синтаксического анализа по моменту. Если вы заглянете в консоль отладки, вы найдете предупреждающее сообщение, потому что вы что-то передали в какой-то момент, не понимаете изначально и поэтому передаете его обратно в конструктор Date
. См. the user guide, в котором объясняется, что вы должны передать спецификатор формата, когда у вас есть пользовательский ввод.
Ваш вход содержит смещение часового пояса +0100
. Это означает, что время 7:00 составляет UTC + 1, что эквивалентно 6:00 UTC. Это значение, которое имеет момент, когда вы впервые разобрали его с помощью moment.utc(yourInput)
Вы затем конвертируете 6:00 UTC по местному времени, когда вы вызываете функцию local()
. Это 7:00 UTC + 1, которое вы видите.
Как это решить, это зависит от того, что вы на самом деле хотите сделать. Вы сказали, что ожидали 8:00 UTC, но это не имеет смысла с введенного вами ввода, потому что 7:00 (+1) == 6:00 (+0)
.
Если вы имели в виду, что вы хотели утверждать, что исходное значение времени действительно было UTC, а не UTC + 1, даже если оно находится на вашем входе, тогда укажите строку формата, которая содержит только те части, которые вам интересны. В режиме раздельного разбора Moment по умолчанию игнорируется что-либо постороннее.
date = 'Thu Oct 27 2016 07:00:00 GMT+0100 (GMT Standard Time)';
moment.utc(date, 'ddd MMM DD YYYY HH:mm:ss').local().format("ddd MMM DD YYYY HH:mm:ss");
Другими словами, ваша дата ввода только Thu Oct 27 2016 07:00:00
здесь, а остальное игнорируется. Вы утверждаете, что он находится в UTC, передав его в moment.utc
, а затем, когда вы конвертируете его в локальный, он закончится в 8:00.
Однако, несмотря на то, что вы просили, я думаю, что date
на самом деле JavaScript Date
объект, чья строка вывод .toString()
является то, что вы показываете здесь. В этом случае объект Date
уже представляет определенный момент времени, который составляет 6:00 UTC.Так что неважно, делаете ли вы moment.utc(date).local()
или просто moment(date)
. Оба оставят вас в тот же момент времени, представленный местным часовым поясом.
Возможно, вы захотите вернуться к своему входу и выяснить, как вы его включили в число GMT+0100
, когда вы думаете, что это фактически значение UTC. Учтите, что если у вас на самом деле было 8:00 UTC, ваш вход сказал бы 09:00 GMT+0100
.
Не будет '' (GMT Стандартное время) '' выбросить его? – evolutionxbox
Нет, но '+ 0100' будет. –
UTC - это стандарт, а не формат. ;-) – RobG