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