[javascript] JavaScript로 ISO 8601 형식의 문자열을 어떻게 출력합니까?

나는이 Date개체를. 다음 스 니펫 title일부를 어떻게 렌더링 합니까?

<abbr title="2010-04-02T14:12:07">A couple days ago</abbr>

다른 도서관의 “상대 시간”부분이 있습니다.

나는 다음을 시도했다.

function isoDate(msSinceEpoch) {

   var d = new Date(msSinceEpoch);
   return d.getUTCFullYear() + '-' + (d.getUTCMonth() + 1) + '-' + d.getUTCDate() + 'T' +
          d.getUTCHours() + ':' + d.getUTCMinutes() + ':' + d.getUTCSeconds();

}

그러나 그것은 나에게 준다 :

"2010-4-2T3:19"



답변

이미 다음과 같은 함수가 있습니다 toISOString().

var date = new Date();
date.toISOString(); //"2011-12-19T15:28:46.493Z"

어쨌든, 당신이 그것을 지원하지 않는 브라우저 에 있다면, 나는 당신을 덮었습니다.

if ( !Date.prototype.toISOString ) {
  ( function() {

    function pad(number) {
      var r = String(number);
      if ( r.length === 1 ) {
        r = '0' + r;
      }
      return r;
    }

    Date.prototype.toISOString = function() {
      return this.getUTCFullYear()
        + '-' + pad( this.getUTCMonth() + 1 )
        + '-' + pad( this.getUTCDate() )
        + 'T' + pad( this.getUTCHours() )
        + ':' + pad( this.getUTCMinutes() )
        + ':' + pad( this.getUTCSeconds() )
        + '.' + String( (this.getUTCMilliseconds()/1000).toFixed(3) ).slice( 2, 5 )
        + 'Z';
    };

  }() );
}


답변

https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference:Global_Objects:Date 페이지의 마지막 예를 참조 하십시오 .

/* Use a function for the exact format desired... */
function ISODateString(d) {
    function pad(n) {return n<10 ? '0'+n : n}
    return d.getUTCFullYear()+'-'
         + pad(d.getUTCMonth()+1)+'-'
         + pad(d.getUTCDate())+'T'
         + pad(d.getUTCHours())+':'
         + pad(d.getUTCMinutes())+':'
         + pad(d.getUTCSeconds())+'Z'
}

var d = new Date();
console.log(ISODateString(d)); // Prints something like 2009-09-28T19:03:12Z


답변

웹에서 거의 모든 toISO 방법은 문자열을 출력하기 전에 “Z”ulu 시간 (UTC)으로 변환을 적용하여 시간대 정보를 삭제합니다. 브라우저의 기본 .toISOString ()도 시간대 정보를 삭제합니다.

서버 또는 수신자가 항상 전체 ISO 날짜를 Zulu 시간 또는 필요한 시간대로 변환 할 수 있기 때문에 발신자의 시간대 정보를 계속 얻을 수 있으므로 중요한 정보는 삭제됩니다.

내가 찾은 가장 좋은 해결책은 Moment.js 자바 스크립트 라이브러리를 사용하고 다음 코드를 사용하는 것입니다.

시간대 정보 및 밀리 초로 현재 ISO 시간을 얻으려면

now = moment().format("YYYY-MM-DDTHH:mm:ss.SSSZZ")
// "2013-03-08T20:11:11.234+0100"

now = moment().utc().format("YYYY-MM-DDTHH:mm:ss.SSSZZ")
// "2013-03-08T19:11:11.234+0000"

now = moment().utc().format("YYYY-MM-DDTHH:mm:ss") + "Z"
// "2013-03-08T19:11:11Z" <- better use the native .toISOString() 

표준 시간대 정보는 있지만 밀리 초가없는 기본 JavaScript Date 객체의 ISO 시간을 가져 오려면

var current_time = Date.now();
moment(current_time).format("YYYY-MM-DDTHH:mm:ssZZ")

이것은 Date.js와 결합하여 Date.today ()와 같은 함수를 가져 와서 결과를 순간적으로 전달할 수 있습니다.

이와 같은 형식의 날짜 문자열은 JSON 컴파일러이며 데이터베이스에 저장하기에 적합합니다. 파이썬과 C #이 좋아하는 것 같습니다.


답변

질문 질문은 ISO 형식이었다 감소 정밀. 짜잔 :

 new Date().toISOString().slice(0, 19) + 'Z'
 // '2014-10-23T13:18:06Z'

후행 Z가 필요하다고 가정하면 그렇지 않으면 생략하십시오.


답변

Internet Explorer 8 및 이전 버전에서는 지원되지 않는 최단 시간 :

new Date().toJSON()


답변

IE7을 지원할 필요가없는 경우 다음은 훌륭하고 간결한 해킹입니다.

JSON.parse(JSON.stringify(new Date()))


답변

고객이 머리에서 변환하는 것을 좋아하지 않기 때문에 일반적으로 UTC 날짜를 표시하고 싶지 않습니다. 현지 ISO 날짜 를 표시하기 위해 다음 기능을 사용합니다.

function toLocalIsoString(date, includeSeconds) {
    function pad(n) { return n < 10 ? '0' + n : n }
    var localIsoString = date.getFullYear() + '-'
        + pad(date.getMonth() + 1) + '-'
        + pad(date.getDate()) + 'T'
        + pad(date.getHours()) + ':'
        + pad(date.getMinutes()) + ':'
        + pad(date.getSeconds());
    if(date.getTimezoneOffset() == 0) localIsoString += 'Z';
    return localIsoString;
};

위의 함수는 표준 시간대 오프셋 정보를 생략하므로 (현지 시간이 UTC 인 경우 제외) 아래 함수를 사용하여 로컬 오프셋을 단일 위치에 표시합니다. 매번 오프셋을 표시하려는 경우 위 함수의 결과에 출력을 추가 할 수도 있습니다.

function getOffsetFromUTC() {
    var offset = new Date().getTimezoneOffset();
    return ((offset < 0 ? '+' : '-')
        + pad(Math.abs(offset / 60), 2)
        + ':'
        + pad(Math.abs(offset % 60), 2))
};

toLocalIsoString을 사용합니다 pad. 필요한 경우 거의 모든 패드 기능처럼 작동하지만 완전성을 위해 이것이 내가 사용하는 것입니다.

// Pad a number to length using padChar
function pad(number, length, padChar) {
    if (typeof length === 'undefined') length = 2;
    if (typeof padChar === 'undefined') padChar = '0';
    var str = "" + number;
    while (str.length < length) {
        str = padChar + str;
    }
    return str;
}