2012-10-31 67 views
3

我有一个系统返回一个包含字符串格式日期的JSON对象。Javascript日期字符串转换

这些日期的格式为“2012年10月19日6时05分38秒格林尼治标准时间”(没有...我只能和他们这样的)

所以我需要进入一个日期此对象(d)准备好输出为d.toLocaleDateString()

在铬它完美通过只是将字符串传递给一个新的日期(糟糕的不良铬 - 使埃里克懒惰),但当然它在FF和IE失败

我可以通过分割字符串来解决它,但它不漂亮,我还没有想出处理来自GMT的偏移量。

必须有更优雅的方式......?

我敢肯定这里有人可以在一行中做到这一点。

+0

如果您还没有为了处理不同的时区,抵消似乎没有必要;如果你不得不,并且如果总是以格林尼治标准时间(UTC)出现,“日期”对象有一堆'setUTCXXX'方法和一个静态的'UTC'方法。 – Passerby

回答

2

这不是很一行代码,但如果你知道你所有的日期将是GMT,类似下面应该工作:

function parseDate(dateString) { 
    // [y, m, d, hr, min, sec] 
    var parts = dateString.match(/\d+/g); 

    // Months are 0-indexed 
    parts[1] -= 1; 

    return new Date(Date.UTC.apply(Date, parts)); 
} 
+0

+1整洁的解决方案。 – inhan

+0

哦,这是整洁的+1现在,当我明天回到办公室时可能是大勾子 –

+0

完美的作品 - 谢谢 –

2

如果我是你,并有权访问收集该信息(并输出它)的服务器端脚本,我会将日期转换为unix时间戳,然后使用Date构造函数轻松进行Javascript处理。

编辑:如果您使用PHP,您可以使用strtotime()函数将字符串日期转换为数字unix时间戳。

+0

我希望我有,但不是,服务器端的东西来自COTS应用程序的REST API –

2

如果您知道确切的格式,您可以使用库如Moment.js:Documentation for Moment.js

为了解析:

var dateString = "2012-10-19 06:05:38 GMT".replace(" GMT", ""); 
var date = moment(dateString, "YYYY-MM-DD HH:mm:ss"); 
+0

[更具体地说](http://momentjs.com/docs/#/parsing/string-format/) – Polyov

+0

我的优先考虑date.js - 那会吃掉这个问题。但我更愿意做到这一点,而不会退缩在图书馆 –

+0

@EricT:我也是date.js的粉丝,但不幸的是它不再积极开发,我遇到了一些bug,但你可能会能够在这里使用它。如果我有机会,我会在无图书馆解决方案中采取行动。 –

相关问题