[javascript] moment.js에서 날짜를 ISO 8601로 어떻게 포맷합니까?

이 문서는 언급 moment.ISO_8601– (2.7.0에서 서식 옵션으로 http://momentjs.com/docs/#/parsing/special-formats/ :하지만 어느 쪽이 작업 (심지어 2.7.0)의)

var date = moment();
date.format(moment.ISO_8601); // error
moment.format(date, moment.ISO_8601); // error

( http://jsfiddle.net/b3d6uy05/1/ )

moment.js에서 ISO 8601을 얻으려면 어떻게해야합니까?



답변

moment().toISOString(); // or format() - see below

http://momentjs.com/docs/#/displaying/as-iso-string/

업데이트
대답을 기반으로 : @sennet 및 @dvlsg에 의해 주석으로는 (참조 바이올린을 )은 차이가 있음을 주목해야 format하고 toISOString. 둘 다 정확하지만 기본 프로세스가 다릅니다. toISOStringDate 객체로 변환하고 UTC로 설정 한 다음 기본 날짜 프로토 타입 함수를 사용하여 ISO8601을 UTC (밀리 초 YYYY-MM-DD[T]HH:mm:ss.SSS[Z]) 로 출력 합니다. 반면 밀리 초없이 format기본 형식 ( YYYY-MM-DDTHH:mm:ssZ)을 사용 하고 시간대 오프셋을 유지합니다.

예기치 않은 결과가 발생할 수 있다고 생각 하여 문제 를 열었습니다 .


답변

format매개 변수없이 사용 :

var date = moment();
date.format(); // "2014-09-08T08:02:17-05:00"

( http://jsfiddle.net/8gvhL1dz/ )


답변

바닐라 JS로도 가능

new Date().toISOString() // "2017-08-26T16:31:02.349Z"


답변

Mongoose를 사용하여 MongoDB에 날짜를 저장하는 경우 모든 날짜가 밀리 초와 함께 ISO 날짜로 저장되므로 toISOString ()을 사용해야합니다.

moment.format()

2018-04-17T20:00:00Z

moment.toISOString() -> USE THIS TO STORE IN MONGOOSE

2018-04-17T20:00:00.000Z


답변

날짜 부분 (예 : 2017-06-27)을 원하고 시간대와 아랍어에 관계없이 작동하려면 다음과 같이 작성하십시오.

function isoDate(date) {
    if (!date) {
        return null
    }
    date = moment(date).toDate()

    // don't call toISOString because it takes the time zone into
    // account which we don't want.  Also don't call .format() because it
    // returns Arabic instead of English

    var month = 1 + date.getMonth()
    if (month < 10) {
        month = '0' + month
    }
    var day = date.getDate()
    if (day < 10) {
        day = '0' + day
    }
    return date.getFullYear() + '-' + month + '-' + day
}


답변

var x = moment();

//date.format(moment.ISO_8601); // error

moment("2010-01-01T05:06:07", ["YYYY", moment.ISO_8601]);; // error
document.write(x);


답변