2015-10-30 7 views
0

Я пытаюсь добавить часы с моментом в часовой пояс DST. Часы добавляются правильно, однако часовой пояс DST не идентифицирован.Проблема с конверсией DST с моментом add

Пример: я добавляю 4 часа в «Сб. 31 октября 2015 года 20:00:00 GMT-0400», который (Восточное летнее время). После добавления 4 часов я получаю «Sun Nov 01 2015 00:00:00 GMT-0400». Ожидаемый результат: «Вс Nov 01 2015 00:00:00 GMT-0500», поскольку переход на летнее время заканчивается 1 ноября 2015 года.

Установите часовой пояс вашей локальной машины на (UTC-05: 00) Восточное время (US & Канада) при его тестировании.

var date1 = moment('2015-10-31T20:00:00-04:00').toString(); 
console.log(date1) 
output- Sat Oct 31 2015 20:00:00 GMT-0400 

var convertedDate = moment($scope.date1).add('hours',4).toString(); 
console.log(convertedDate) 
output- Sun Nov 01 2015 00:00:00 GMT-0400 

Plunker : http://plnkr.co/edit/nF06r0YEjOk78F4QbtvF?p=preview 

-Jimit

ответ

0

Пара вещей

  1. Пожалуйста, обновите ваш вопрос, чтобы показать свой код здесь, на StackOverflow. Вы должны показывать только части, необходимые для того, чтобы задать свой вопрос.

  2. Посмотрите на свой код на Plunker, вы должны предпочесть использовать format вместо toString, но это не является причиной проблемы.

  3. Кроме того, вы создаете строку, чтобы просто проанализировать ее, что неэффективно и может иногда приводить к ошибкам. Хотя это и не причина.

  4. Основная проблема заключается в том, что вы работаете в предположении, что DST заканчивается в восточном часовом поясе США в полночь, когда на самом деле это заканчивается в 2:00 утра. Часы будут двигаться от 2015-11-01T01:59:59.999-04:00 до 2015-11-01T01:00:00.00-05:00 через миллисекунду позже.

    Момент может справиться с этим просто отлично.

    example

Обратите внимание на части мне выделено, показывая 1:00 часа повторяется со смещением изменяя, в связи с DST отката.

+0

Получил, что Мэтт. Благодарю. –

1

«В настоящее время, летнее время начинается на второе воскресенье марта и заканчивается в первое воскресенье ноября, со временем меняется с место в 2:00 утра местное время."

Daylight saving time in the UnitedStates.

В самом деле, вы можете увидеть летнее изменение между 5 и 6 часовыми сменами.

+0

При всем моем уважении я не могу понять, почему это не достаточный ответ. OP согласился с тем, что время перехода на летнее время заканчивается на Sun Nov 01 2015 00:00:00, тогда как, по правде говоря, оно заканчивается на Sun Nov 01 2015 02:00:00. Заявив, что, отвечает на «[..] однако часовой пояс DST не идентифицирован». часть вопроса, не так ли? – Sevle

+0

Я не пытался критиковать вопрос ФП, я определил часть его замешательства и предоставил решение. – Sevle

+1

Спасибо, что выделили его. Это помогло. Отмеченный ответ от Мэтта как ответ только потому, что он помог мне прояснить причину с доказательствами. –