如何在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

在输出字符串之前,几乎网上的每个to-ISO方法都会通过应用转换为“Z”ulu时间(UTC)来丢弃时区信息。 浏览器的原生.toISOString()也会删除时区信息。

这会丢弃有价值的信息,因为服务器或收件人始终可以将完整的ISO日期转换为祖鲁语时间或其所需的时区,同时仍可获取发件人的时区信息。

我遇到的最佳解决方案是使用Moment.js JavaScript库并使用以下代码:

获取当前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编译器,并且很适合存储到数据库中。 Python和C#似乎喜欢它。

链接地址: http://www.djcxy.com/p/18647.html

上一篇: How do I output an ISO 8601 formatted string in JavaScript?

下一篇: Converting Date to JS Date Object