2016-05-25 1 views
0

Мой кодЯ получаю неправильную дату после преобразования с помощью moment.js

console.log(moment(new Date('2016-05-24T18:50:05.000')).format('LL')); 

Он должен быть 24 мая 2016, но это дает мне 25 мая 2016.

Может ли кто-нибудь мне помочь.

+0

Может ли это быть проблема часовых поясов? Рассмотрим указание часовой пояс UTC. –

+0

Только для этой даты это происходит, иначе я проверил, для других он отлично работает. вы можете проверить пример в plukr [link] (https://plnkr.co/edit/e8cIXxajUmE7ggVXueTG?p=preview) – user3152849

+0

Moment предполагает, что время является местным, если вы не указали часовой пояс. Итак, если вы находитесь в Pacific Time или Mountain Time или Central Time, это означало бы 25 мая в UTC (помните, что UTC будет на 6 часов раньше вас). Попробуйте строку ''2016-05-24T18: 50: 05.000Z'', чтобы указать часовой пояс UTC. –

ответ

2

Необходимо указать дату как UTC.

Вы можете сделать это в любом из следующих способов:

console.log(moment(new Date('2016-05-24T18:50:05.000Z')).format('LL')); 

Где, то Z указывает, что время UTC. Или:

console.log(moment.utc(new Date('2016-05-24T18:50:05.000')).format('LL')); 


Вы можете передать строку даты ISO 8601 в момент непосредственно.

Нет необходимости обертывать строку в объект Date javascript. Тогда ваш код становится:

console.log(moment('2016-05-24T18:50:05.000Z').format('LL')); 

Или:

console.log(moment.utc('2016-05-24T18:50:05.000').format('LL')); 
+0

console.log (moment.utc (new Date()). Format ('LL')); Он показывает вчера дату не сегодня почему? – user3152849

+1

new Date() создает дату по местному времени, moment.utc() заставляет момент интерпретировать дату как UTC. format ('LL') отображает дату по местному времени. Используйте параметр moment.utc() вместо момента(), если вы хотите, чтобы время datetime передавалось как аргумент, интерпретируемый как utc. – user2961850

+1

Почему вы вообще называете 'новая дата'? –

Смежные вопросы