2009-12-06 38 views
9

这可能很容易,但我有点困惑如何做到这一点。我如何,使用JavaScript,请从以下ISO 8601日期字符串解析只有时间:使用JavaScript解析时间

2009-12-06T17:10:00 

换句话说,与上面的字符串,希望我到输出:

5:10 PM 

任何指导意见/教程就很好。

+1

我不是故意把它作为这个问题的重复来关闭:'( – Ryan 2012-07-24 15:10:42

+0

我不同意这是所显示问题的完全重复。解析ISO时间戳是解析人类输入的另一个问题。 – Andrew 2013-01-04 21:30:51

回答

0

string.slice(11,16)将返回17:10。从那里(可能使用slice以更有趣和令人兴奋的方式),将其转换为24小时格式应该相当简单。

0

这就是所谓的ISO 8601格式。 Mochikit自带的功能来分析它,

http://mochikit.com/doc/html/MochiKit/DateTime.html

你可以得到一个Date对象这样,

timestamp = isoTimestamp("2009-12-06T17:10:00"); 

仅复制的功能,如果你不想使用Mochikit。

0

解析ISO时间戳很简单,以文化上合适的方式格式化时间很困难(5:10 PM不适用于所有地区)许多工具包为ISO部分提供例程,它甚至是新ECMAScript的一部分5标准;然而,只有一对夫妇做后者。

您可以尝试dojo.date.stamp.fromISOStringdojo.date.locale.format

我相信Date-JS也可以格式化时间。

11

Chrome & Firefox:标准JavaScript日期构造函数采用ISO 8601日期字符串。例如:

var sampleDate = new Date("2010-03-07T02:13:46Z");

返回此Date对象: “太阳2010年3月7日13点13分46秒GMT + 1100(澳大利亚东部夏令时间)”

这并不在IE浏览器(包括最新的IE 9)

这里是在http://delete.me.uk/2005/03/iso8601.html由Paul Sowden一个跨浏览器的解决方案:

Date.prototype.setISO8601 = function (string) { 
    var regexp = "([0-9]{4})(-([0-9]{2})(-([0-9]{2})" + 
     "(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?" + 
     "(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?"; 
    var d = string.match(new RegExp(regexp)); 

    var offset = 0; 
    var date = new Date(d[1], 0, 1); 

    if (d[3]) { date.setMonth(d[3] - 1); } 
    if (d[5]) { date.setDate(d[5]); } 
    if (d[7]) { date.setHours(d[7]); } 
    if (d[8]) { date.setMinutes(d[8]); } 
    if (d[10]) { date.setSeconds(d[10]); } 
    if (d[12]) { date.setMilliseconds(Number("0." + d[12]) * 1000); } 
    if (d[14]) { 
     offset = (Number(d[16]) * 60) + Number(d[17]); 
     offset *= ((d[15] == '-') ? 1 : -1); 
    } 

    offset -= date.getTimezoneOffset(); 
    time = (Number(date) + (offset * 60 * 1000)); 
    this.setTime(Number(time)); 
} 

用法:

var date = new Date(); 
date.setISO8601("2005-03-26T19:51:34Z"); 

如果你在JavaScript中做了很多日期时间操作,我还可以建议检查一些JS库,如MomentJS。它处理一些常见的事情,如日期分析,格式化和计算两个日期之间的差异,并支持多个本地化。