Ответ 1
Используйте это, чтобы преобразовать объект-объект в объект даты:
Из http://momentjs.com/docs/#/displaying/as-javascript-date/
moment().toDate();
Урожайность:
Tue Nov 04 2014 14:04:01 GMT-0600 (CST)
Использование 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())
Используйте это, чтобы преобразовать объект-объект в объект даты:
Из http://momentjs.com/docs/#/displaying/as-javascript-date/
moment().toDate();
Урожайность:
Tue Nov 04 2014 14:04:01 GMT-0600 (CST)
Пока вы инициализировали момент-время с данные для зоны, которые вы хотите, ваш код работает так, как ожидалось.
Вы правильно преобразуете момент в часовой пояс, который отражается во второй строке вывода momentObj.format()
.
Переключение на UTC не просто отменяет смещение, оно возвращается обратно в часовой пояс UTC. Если вы собираетесь это сделать, вам не нужен оригинальный вызов .tz()
. Вы можете просто сделать moment.utc()
.
Возможно, вы просто пытаетесь изменить строку выходного формата? Если это так, просто укажите параметры, которые вы хотите использовать для метода format
:
momentObj.format("YYYY-MM-DD HH:mm:ss")
Что касается последних строк вашего кода - когда вы возвращаетесь к объекту Date
с помощью toDate()
, вы отказываетесь от поведения moment.js и возвращаетесь к поведению JavaScript. Объект JavaScript Date
всегда будет печататься в локальном часовом поясе компьютера, на котором он запущен. Ничто в этом ничего не может сделать.
Несколько других мелочей:
В то время как конструктор момента может принимать Date
, обычно лучше не использовать его. Для "сейчас" не используйте moment(new Date())
. Вместо этого просто используйте moment()
. Оба будут работать, но это излишне избыточно. Если вы разбираете строку, передайте эту строку непосредственно в момент. Не пытайтесь сначала разобрать его на Date
. Вы обнаружите, что синтаксический анализатор момента намного надежнее.
Временные зоны, такие как MST7MDT
, существуют для обратной совместимости. Они основаны на часовых поясах в стиле POSIX, и лишь некоторые из них находятся в данных TZDB. Если это абсолютно необходимо, вы должны использовать ключ, например America/Denver
.
.toDate
на самом деле не работал у меня. Итак, вот что я сделал:
futureStartAtDate = new Date(moment().locale("en").add(1, 'd').format("MMM DD, YYYY HH:MM"))
надеюсь, что это поможет
Так как momentjs не контролирует объект даты в JavaScript, я нашел способ обойти это.
const currentTime = new Date();
const convertTime = moment(currentTime).tz(timezone).format("YYYY-MM-DD HH:mm:ss");
const convertTimeObject = new Date(convertTime);
Мне нужна информация о часовом поясе в моей строке даты. Я изначально использовал moment.tz(dateStr, 'America/New_York').toString();
, но потом начал получать ошибки о том, чтобы вернуть эту строку обратно.
Я попробовал moment.tz(dateStr, 'America/New_York').toDate();
, но потом потерял информацию о часовом поясе, которая мне нужна.
Единственное решение, которое возвратило бы строку даты использования с часовым поясом, которая могла быть возвращена в момент, была moment.tz(dateStr, 'America/New_York').format();
момент обновил js lib по состоянию на 06/2018.
var newYork = moment.tz("2014-06-01 12:00", "America/New_York");
var losAngeles = newYork.clone().tz("America/Los_Angeles");
var london = newYork.clone().tz("Europe/London");
newYork.format(); // 2014-06-01T12:00:00-04:00
losAngeles.format(); // 2014-06-01T09:00:00-07:00
london.format(); // 2014-06-01T17:00:00+01:00
если у вас есть свобода использования Angular5+, тогда лучше использовать функцию datePipe, чем функцию часового пояса. Я должен использовать moment.js, потому что мой проект ограничен только Angular2.
let dateVar = moment('any date value');
let newDateVar = dateVar.utc().format();
красиво и чисто !!!!
Момент ([2012,11,24]). Клон(). Todate()
Любая переменная момента должна работать, пока вы используете .clone() перед .toDate().
попробуй (без шага format
)
new Date(moment())
var d = moment.tz("2019-04-15 12:00", "America/New_York");
console.log( new Date(d) );
console.log( new Date(moment()) );
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.23/moment-timezone-with-data.min.js"></script>
Чтобы преобразовать любую дату, например, utc:
moment( moment().utc().format( "YYYY-MM-DD HH:mm:ss" )).toDate()