Момент.JS преобразование в объект даты



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



пример:



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())
488   6  

6 ответов:

используйте это для преобразования объекта moment в объект date:

от 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(), вы отказываетесь от поведения момент.js и возвращаясь к поведению JavaScript. В JavaScript Date объект всегда будет печататься в локальном часовом поясе компьютера, на котором он работает. Есть ничего особенного.Джей с этим справится.

еще пара мелочей:

  • пока конструктор момента можете взять Date, как правило, лучше не использовать. Для "сейчас", не используйте moment(new Date()). Вместо этого просто используйте moment(). Оба будут работать, но это излишне избыточно. Если вы анализируете строку, передайте эту строку непосредственно в moment. Не пытайтесь разобрать его на Date первый. Вы найдете парсер момента, чтобы быть гораздо более надежный.

  • часовые пояса, как MST7MDT там для обратной совместимости. Они происходят из часовых поясов стиля POSIX, и только некоторые из них находятся в данных TZDB. Если это не является абсолютно необходимым, вы должны использовать такой ключ, как America/Denver.

.toDate на самом деле не работает для меня, так что, вот что я сделал :

futureStartAtDate = new Date(moment().locale("en").add(1, 'd').format("MMM DD, YYYY HH:MM"))

надеюсь, что это помогает

мне нужно было иметь информацию о часовом поясе в моей строке даты. Я изначально использовал 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 там, чем функцию часового пояса здесь. Я должен использовать момент.js потому что мой проект ограничивается только Angular2.

Так как momentjs не имеет никакого контроля над javascript date object я нашел работу вокруг этого.

const currentTime = new Date();    
const convertTime = moment(currentTime).tz(timezone).format("YYYY-MM-DD HH:mm:ss");
const convertTimeObject = new Date(convertTime);

Это даст вам объект даты javascript с преобразованным временем

Comments

    Ничего не найдено.