如何在浏览器中一致地解析此日期字符串?

时间:2012-07-06 19:15:18

标签: javascript cross-browser

我正在使用Javascript的Date对象将字符串解析为毫秒时间戳。我正在使用Date.parse(),我正在解析的字符串格式如下:“2012-07-06 12:59:36-0600”

Date.parse在Chrome中运行良好,解析为我预期的正确时间戳。但是,当我通过Date.parse()运行字符串时,每个其他浏览器都返回“NaN”。

我知道Date对象实现是特定于浏览器的,但是我想找到一个能够为任何浏览器解析这种类型的字符串的javascript解决方案。关于我在Javascript中可以使用什么来实现这一目标的任何建议?

3 个答案:

答案 0 :(得分:6)

将输入转换为有效ISO 8601

Date.parse("2012-07-06 12:59:36-0600".replace(' ', 'T'));

这在Firefox中已经过测试(并且有效)。

注意:

  

请注意,虽然在日期字符串中使用时区说明符   解析以正确解释参数,它们不会影响   返回值,它始终是之间的毫秒数   1970年1月1日00:00:00 UTC和由时间表示的时间点   参数。

答案 1 :(得分:1)

如果格式一致,您可以自己解析:

var date = "2012-07-06 12:59:36-0600";
function parseDatetime(input) {
    var match = input.match(/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})([-+]\d{4})/);
    match.shift(); // discard the "full match" index
    match[2]--;
    match[4] += parseInt(match[6],10);
    return new Date(match[0],match[1],match[2],match[3],match[4],match[5]);
}

答案 2 :(得分:0)

你试过DateJS吗?也许你不想添加另一个库,但它会解决你的crossbrowser问题。