如何基于UTC RFC 3339时间戳创建本地化JavaScript日期

如何基于UTC RFC 3339时间戳创建本地化JavaScript日期,javascript,date,Javascript,Date,假设以下UTC RFC 3339时间戳: 2012-09-30 12:12:12Z 用JavaScript生成本地化日期的好方法是什么 我已经得出了以下复杂(但有效)的解决方案,我不禁想我错过了一些东西 /** * Accepts a string on the format YYYY-MM-DD HH:MM:SS * and returns a localised Date */ DateUtils.localised_date_from = function (rfc_timestam

假设以下UTC RFC 3339时间戳:

2012-09-30 12:12:12Z

用JavaScript生成本地化日期的好方法是什么

我已经得出了以下复杂(但有效)的解决方案,我不禁想我错过了一些东西

/**
 * Accepts a string on the format YYYY-MM-DD HH:MM:SS
 * and returns a localised Date
 */
DateUtils.localised_date_from = function (rfc_timestamp) {
    var date_parts = rfc_timestamp.substring(0, 10).split("-"),
        time_parts = rfc_timestamp.substring(10).split(":"),
        year = parseInt(date_parts[0], 10),
        month = parseInt(date_parts[1], 10) - 1,
        date = parseInt(date_parts[2], 10),
        hours = parseInt(time_parts[0], 10),
        minutes = parseInt(time_parts[1], 10),
        seconds = parseInt(time_parts[2], 10),
        utc_timestamp = Date.UTC(year, month, date, hours, minutes, seconds);

    return new Date(utc_timestamp);
};
编辑

Date.parse
应该是一个很好的起点,但在较旧的浏览器中,RFC3339不起作用,至少在IE8中不起作用,在IE8中,新的Date.parse(Date.parse(“2012-09-30 12:12:12Z”)返回
NaN
(评论后)

给我:

Sun Sep 30 2012 07:12:12 GMT-0500 (Central Daylight Time)
编辑

我找不到(快速谷歌)解析RFC3339是否是ECMA脚本规范的一部分,所以不能保证这是跨浏览器的。在Chrome 22为我工作


如果您遇到问题,可能值得检查一下

我想您已经尝试了
Date.parse()
?我不确定它是如何处理这种特殊的格式的,但我没有!哈,在Chrome上效果很好!谢谢,现在。。。我将在IE7等中尝试。您可以读取指定要解析的时间格式的可能副本。然而,大多数浏览器也应该实现ISO8601,RFC3339是其中的一个子集。然而,我不认为这对所有的浏览器都是有保证的,尤其是较老的浏览器……事实上,我记得我尝试过Date.parse,它在IE8中返回NaN。我应该在回答中指定我想要一个跨浏览器解决方案。@JonNylander:Check out
Date.js
I linked。。。这里有一个函数
Date.parseExact
,我相信它会满足您的需要。但是,如果这是您唯一需要的日期函数,那么您可能不想加载整个库。如果你在js中定期使用Date,它会非常有用。我很熟悉Date.js,它确实很方便。我确实想跳过该库的开销,因为我觉得只要日期存储为Unix UTC时间戳,所有浏览器似乎都能很好地本地化。这个项目也有自己的JS日期库注入到代码库中,并且它疯狂地在日期对象上进行原型设计。因此,在这种情况下,这不是一个选项,但在大多数情况下,它应该是。我现在给你的答案打勾。谢谢你花时间,这很有意义。Bergi的链接中也有一些很好的信息,尽管我不能说有什么好的理由将它(在公认答案中的函数)包含在你的问题中。
Sun Sep 30 2012 07:12:12 GMT-0500 (Central Daylight Time)