3

我有一个系统,它返回一个 JSON 对象,其中包含字符串格式的日期。

这些日期的格式为“格林威治标准时间 2012-10-19 06:05:38”(不......我被这样困住了)

所以我需要把它变成一个日期对象 (d) 准备输出为 d.toLocaleDateString()

在 chrome 中,只需将字符串传递给新的 Date 即可完美运行(Bad bad Chrome - 使 Eric 变得懒惰),但在 FF 和 IE 中它当然会失败

我可以通过拆分字符串来修复它,但它并不漂亮,而且我还没有想出处理来自 GMT 的偏移量。

一定有更优雅的方式……?

我敢肯定这里有人可以在一行中完成。

4

4 回答 4

2

它不是一个单行的,但如果你知道你所有的日期都是格林威治标准时间,那么类似下面的东西应该可以工作:

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));
}
于 2012-10-31T03:34:54.363 回答
2

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

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

于 2012-10-31T03:12:14.093 回答
2

如果您知道确切的格式,则可以使用 Moment.js 之类的库:Moment.js文档

解析:

var dateString = "2012-10-19 06:05:38 GMT".replace(" GMT", "");
var date = moment(dateString, "YYYY-MM-DD HH:mm:ss");
于 2012-10-31T03:12:55.557 回答
0

您可以手动解析 dateString,并准确传递 Date 构造函数:<a href="https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date" rel="nofollow ">https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date

   var dateString = "2012-10-19 06:05:38 GMT".split(" "),
       date = dateString[0].split("-"),
       time = dateString[1].split(":");

   var dateObj = new Date(date[0],date[1]-1,date[2],time[0],time[1],time[2]);
于 2012-10-31T03:43:14.187 回答