[javascript] Moment.js를 날짜 객체로 변환

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개체는 항상 실행중인 컴퓨터의 현지 시간대로 인쇄됩니다. 그것에 대해 moment.js가 할 수있는 일은 없습니다.

다른 작은 것들 :

  • 순간 생성자는 동안 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는 자바 스크립트 날짜 객체를 제어 할 수 없으므로이 문제를 해결했습니다.

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();


답변

let dateVar = moment('any date value');
let newDateVar = dateVar.utc().format();

좋고 깨끗합니다 !!!!


답변

날짜를 변환하려면 (예 : utc)

moment( moment().utc().format( "YYYY-MM-DD HH:mm:ss" )).toDate()