2016-06-03 5 views
1

Я использую moment.js, чтобы получить смещение даты UTC.Какой формат даты использовать в moment.js?

У меня есть следующий код, который дает мне смещение, но я получаю предупреждение "Deprecation warning: moment construction falls back to js Date".

var s = booking.booking_date_time.toString(); 
console.log(moment(s).parseZone(s).utcOffset()); 

Переменная s выше установлено значение "Mon Jun 13 2016 08:00:00 GMT+1000 (AUS Eastern Standard Time)".

Я знаю, что, чтобы добраться до предупреждения, мне нужно указать формат даты в данный момент, но я не уверен, какой формат даты должен быть. Я пробовал этот формат "EEE MMM dd yyyy HH:mm:ss ZZ", но это не работает.

+0

Как насчет того, противоположный подход, форматирование * текущее время * до тех пор, пока выглядит достаточно близко к формату вашего ввода? – noisypixy

+1

Является ли 'booking.booking_date_time' объектом' Date'? Если да, просто передайте его прямо сейчас. Нет необходимости проходить через строки. –

ответ

1

Как указано в doc: -

При создании момента из строки, мы сначала проверить, если строка соответствует известным ISO 8601 форматов, а затем падают обратно на новую дату (строка), если известный формат не найден.

Поэтому я предлагаю вам использовать moment(new Date(booking.booking_date_time)), который будет работать. (Если booking.booking_date_time является действительной датой объекта)

относятся также moment-format для изменения в различные форматы, поддерживаемые moment.js

+0

Синхронизация даты с помощью объекта 'Date' ненадежна, и предлагаемый подход также должен проходить в формате 'ddd MMM DD YYYY HH: mm: ss [GMT] ZZ', как предложила Мэгги ниже. Дополнительная информация о несоответствиях 'Date' (здесь) (https://github.com/moment/moment/issues/1407#issuecomment-155630060). –

+0

@AngelaNicholas Почему синтаксический анализ дат через объект Date является ненадежным? – Shrabanee

+0

Объяснение приведено в гиперссылке выше (https://github.com/moment/moment/issues/1407#issuecomment-155630060); вот соответствующая цитата - «Дата синтаксического анализа через объект Date является ненадежной и непоследовательной на разных платформах. Существуют разные реализации и разные типы поведения. Иногда вы можете получить местное время. Иногда вы можете получить UTC. Иногда вы можете получить недопустимую дату. получат разные результаты вблизи переходов DST. Не пытайтесь победить ошибку. Вместо этого следуйте нашим рекомендациям. Используйте либо известный формат, либо укажите строку формата ». –

2

Moment использует собственный набор токенов синтаксического анализа, который не совпадает с другими библиотеками. Таким образом, у вас есть некоторые неправильные знаки. Кроме того, вам нужно указать, что GMT находится в строке, но избегайте его с помощью [].

Все подвели итоги:

moment('Mon Jun 13 2016 08:00:00 GMT+1000', 'ddd MMM DD YYYY HH:mm:ss [GMT]ZZ').format() 
"2016-06-12T17:00:00-05:00" 

Обратите внимание, что, когда вы разбираете с помощью конструкторы по умолчанию момента, он будет конвертировать из указанного смещения местного времени пользователя.

Если вы хотите сохранить фиксированное смещение, использовать parseZone:

moment.parseZone('Mon Jun 13 2016 08:00:00 GMT+1000', 'ddd MMM DD YYYY HH:mm:ss [GMT]ZZ').format() 
"2016-06-13T08:00:00+10:00" 

Edit: Обратите внимание на комментарии. Если это дата, просто передайте ее напрямую. Я должен был это заметить.

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