2014-09-08 2 views
89

이 문서는 (2.7.0에서 - http://momentjs.com/docs/#/parsing/special-formats/) 서식 옵션으로 moment.ISO_8601을 언급하지만, 이러한 작업 (심지어 2.7.0)의도 :moment.js에서 ISO 8601의 날짜 형식을 어떻게 지정합니까?

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? @sennet로하고 @dvlsg에 의해 코멘트 :

+0

사용중인 순간의 버전은 무엇입니까? 문서에서는 2.7.0에 상수가 추가되었다고합니다. – joews

+0

@joews 2.7.0. 문제 제기. 내 대답을 알아 냈어. 알아 냈어. 문서 도구는 대폭 삭제되지 않습니다. – sennett

+0

그래, 그들은 파싱의 맥락에서 특별한 형식만을 언급한다. 이상한. – joews

답변

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

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

업데이트 (Fiddle 참조)주의해야합니다 formattoISOString 사이에 차이가 있음을 의미합니다. 둘 다 정확하지만 기본 프로세스가 다릅니다. toISOString은 Date 객체로 변환하고 UTC로 설정 한 다음 기본 Date 프로토 타입 함수를 사용하여 ISO8601을 밀리 초 (YYYY-MM-DD[T]HH:mm:ss.SSS[Z])의 UTC로 출력합니다. 반면에 format은 밀리 초가 아닌 기본 형식 (YYYY-MM-DDTHH:mm:ssZ)을 사용하고 시간대 오프셋을 유지 관리합니다.

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

+0

@Yashua에 동의합니다. 직관적이지 않기 때문에 "format()"의 사용을 피해야한다고 생각합니다. 또한 네이티브 "toISOString()"을 래핑하는 함수가 전혀 존재하지 않아야한다고 생각하지 않습니다. 즉, 아마도 "TOISO8601()"옵션을 사용하여 시간대를 유지하고 적절한 문서를 작성하는 것이 더 좋습니다. –

+1

utc 시간을 원하지만 독자적인 방식으로 포맷 한 경우 ISO8601 대신 다음을 수행 할 수 있습니다 :'moment(). utc(). format ("OUTPUT_FORMAT")' – StinkyCat

+0

kibana에서 날짜를 형식화하는 유용한 whn JS에 액세스 할 수 없습니다. – Brice

48

매개 변수없이 사용 format :

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

(http://jsfiddle.net/8gvhL1dz/) 대답을 기반으로

+20

두 가지 대답은 ISO 형식 요구 사항을 모두 충족하더라도 보조 메모와 마찬가지로 동일하지 않습니다. 'date.toISOString()'은 밀리 세컨드를 유지하고 utc을 사용합니다. date.format()은 밀리 초를 버리고 현지 표준 시간대를 사용합니다 (또는 적어도 크롬에서 현재 사용하고있는 동작입니다 - http : /jsfiddle.net/8gvhL1dz/22/) – dvlsg

+0

아랍어 로케일과 함께 .format()을 사용하면 영어가 아닌 아랍어 기호가 표시되므로 바람직하지 않을 수 있습니다. – user393274

2

그냥 날짜 부분 (예를 들어 2017년 6월 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 
} 
4

수는 바닐라와 JS

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