Используя Moment.js, я не могу преобразовать правильный объект момента в объект даты с часовыми поясами. Я не могу получить правильную дату.
Пример:
var oldDate = new Date(),
momentObj = moment(oldDate).tz("MST7MDT"),
newDate = momentObj.toDate();
console.log("start date " + oldDate)
console.log("Format from moment with offset " + momentObj.format())
console.log("Format from moment without offset " + momentObj.utc().format())
console.log("(Date object) Time with offset " + newDate)
console.log("(Date object) Time without offset "+ moment.utc(newDate).toDate())
javascript
momentjs
vadim.zhiltsov
источник
источник
Wednesday 24th 2019, 12:47:48 am
это можно конвертировать в2019-04-23T19:17:48.000Z
? @ vadim.zhiltsov.tz("MST7MDT")
. Вот почему существуют такие библиотеки, как moment.tz, дополняющие простую возможность встроенного объекта Date, который понимает только UTC и часовой пояс хоста, вот и все.Ответы:
Используйте это, чтобы преобразовать объект момента в объект даты:
С http://momentjs.com/docs/#/displaying/as-javascript-date/
Урожайность:
источник
toDate
действительно, как получитьDate
объект изmoment
. Но код в теле вопроса спрашивает о преобразовании часового пояса - чтоDate
не может сделать. Если время в горах действительно не является часовым поясом пользователя, то я не уверен, как это ответило на вопрос.moment("12/12/2011")
- это то, где вы получите это сообщение. Это не имеет ничего общего с переходом от момента к дате objmoment().toDate()
Пока вы инициализировали момент-часовой пояс с данными для нужных вам зон , ваш код работает должным образом.
Вы правильно конвертируете момент в часовой пояс, который отражен во второй строке вывода из
momentObj.format()
.Переключение на UTC не просто сбрасывает смещение, оно переключается обратно на часовой пояс UTC. Если вы собираетесь это сделать, вам вообще не нужен исходный
.tz()
звонок. Вы могли бы просто сделатьmoment.utc()
.Возможно, вы просто пытаетесь изменить строку выходного формата? Если это так, просто укажите параметры, которые вы хотите для
format
метода:Что касается последних строк вашего кода - когда вы возвращаетесь к
Date
объекту с помощью объектаtoDate()
, вы отказываетесь от поведения moment.js и возвращаетесь к поведению JavaScript. Объект JavaScriptDate
всегда будет напечатан в местном часовом поясе компьютера, на котором он работает. Там нет ничего, что может сделать .js.Пара других мелочей:
Хотя конструктор моментов может занять
Date
, обычно лучше его не использовать. Для «сейчас» не используйтеmoment(new Date())
. Вместо этого просто используйтеmoment()
. Оба будут работать, но это излишне избыточно. Если вы анализируете строку, передайте эту строку непосредственно в момент. Не пытайтесь разобрать этоDate
первым. Вы найдете парсер момента гораздо более надежным.Часовые пояса вроде бы
MST7MDT
существуют по причинам обратной совместимости. Они происходят из часовых поясов в стиле POSIX, и только некоторые из них находятся в данных TZDB. Если это не является абсолютно необходимым, вы должны использовать такой ключ, какAmerica/Denver
.источник
.toDate()
. 2) Не используйте комментарии, чтобы задавать новые вопросы. Вот для чего предназначена большая кнопка «Задать вопрос» ..toDate
на самом деле не работает для меня, так вот, что я сделал:надеюсь это поможет
источник
moment().add(1, 'd').toDate()
.Так как momentjs не контролирует объект даты в JavaScript, я нашел способ обойти это.
Это даст вам объект даты javascript с конвертированным временем
источник
Мне нужно было иметь информацию о часовом поясе в моей строке даты. Первоначально я использовал,
moment.tz(dateStr, 'America/New_York').toString();
но затем я начал получать ошибки о подаче этой строки в момент.Я попытался,
moment.tz(dateStr, 'America/New_York').toDate();
но затем я потерял информацию о часовом поясе, которая мне была нужна.Единственное решение, которое возвратило пригодную для использования строку даты с часовым поясом, которое могло быть возвращено в момент, было
moment.tz(dateStr, 'America/New_York').format();
источник
красиво и чисто !!!!
источник
Чтобы преобразовать любую дату, например, utc:
источник
moment().utc()
возвращает значения для UTC, затем.format( "YYYY-MM-DD HH:mm:ss" )
возвращает строку, для которой было установлено значение UTC без смещения часового пояса, поэтому он анализируется как локальный. Он не соответствует формату момента по умолчанию, поэтому анализируется встроенным парсером. Он также не соответствует ни одному поддерживаемому формату ECMAScript, поэтому синтаксический анализ зависит от реализации. В любом случае, он анализируется как локальный, поэтому смещение часового пояса применяется снова при создании значения времени Date.Вопрос немного неясен. Я сделаю все возможное, чтобы объяснить это. Сначала вы должны понять, как использовать момент-часовой пояс . В соответствии с этим ответом здесь TypeError: moment (). Tz не является функцией , вы должны импортировать момент из момента времени-часа вместо момента по умолчанию (конечно же, вам нужно сначала установить момент-время npm!). Для большей ясности,
Теперь, чтобы использовать функцию часового пояса, используйте moment.tz («date_string / moment ()», «time_zone») ( для получения более подробной информации посетите https://momentjs.com/timezone/ ). Эта функция вернет моментный объект с определенным часовым поясом. Для большей ясности,
Теперь, когда вы попытаетесь преобразовать newYork (объект момента) с помощью метода toDate () (преобразование формата ISO 8601), вы получите время в Гринвиче, Великобритания. Для получения дополнительной информации просмотрите эту статью https://www.nhc.noaa.gov/aboututc.shtml о UTC. Однако, если вы просто хотите указать свое местное время в этом формате (по нью-йоркскому времени, в соответствии с этим примером), просто добавьте метод .utc (true) с аргументом true к своему объекту момента. Для большей ясности,
Вкратце, moment.tz учитывает указанный вами часовой пояс и сравнивает ваше местное время с временем в Гринвиче, чтобы получить результат. Я надеюсь, что это было полезно.
источник
момент обновил js lib по состоянию на 06/2018.
если у вас есть свобода использования Angular5 +, то лучше использовать функцию datePipe там, чем функцию часового пояса здесь. Я должен использовать moment.js, потому что мой проект ограничен только Angular2.
источник
попробуй (без
format
шага)Показать фрагмент кода
источник
new Date(moment())
эквивалентноnew Date()
. Часовой пояс установлен только для d .