循环浏览json并更改日期格式

时间:2017-08-25 18:51:28

标签: javascript json date

您好我有一些数据存储在变量中,如下所示:

var myData = {
    "results": [
        {
            "time": "20040203",
            "count": 2
        },
        {
            "time": "20040205",
            "count": 1
        },
        {
            "time": "20040206",
            "count": 1
        },
        {
            "time": "20040209",
            "count": 2
        },
        {
            "time": "20040210",
            "count": 2
        },
        {
            "time": "20040211",
            "count": 4
        }
    ]
}

我写的函数要求日期采用Date.parse()使用的格式,例如Tue Jan 01 2013 16:00:00 GMT-0800 (PST)

我还认为如果更容易,格式2003-01-01也会起作用。

这可能吗?如果可以的话,任何人都可以向我发送示例代码或指向正确的方向吗?

谢谢!

4 个答案:

答案 0 :(得分:3)

const myData = {
    "results": [
        {
            "time": "20040203",
            "count": 2
        },
        {
            "time": "20040205",
            "count": 1
        },
        {
            "time": "20040206",
            "count": 1
        },
        {
            "time": "20040209",
            "count": 2
        },
        {
            "time": "20040210",
            "count": 2
        },
        {
            "time": "20040211",
            "count": 4
        }
    ]
};

myData.results.forEach(result => {
  if (parseInt(result.time))
    result.time = new Date(parseInt(result.time)).toString();
});

console.log(myData);

答案 1 :(得分:2)

您可以使用replace和正则表达式注入连字符以从YYYYMMDD到YYYY-MM-DD格式:

const myData = {
    "results": [
        {
            "time": "20040203",
            "count": 2
        },
        {
            "time": "20040205",
            "count": 1
        },
        {
            "time": "20040206",
            "count": 1
        },
        {
            "time": "20040209",
            "count": 2
        },
        {
            "time": "20040210",
            "count": 2
        },
        {
            "time": "20040211",
            "count": 4
        }
    ]
};

myData.results.forEach(result => {
    result.time = result.time.replace(/(....)(..)(..)/, "$1-$2-$3");
});

console.log(myData);

答案 2 :(得分:2)

你的“时间”字符串很奇怪,但我假设“20040203”是2004-02-03还是2004年2月3日?

您可以轻松编写一个函数来分割这些数字并格式化它们,或者您可以使用一个非常好的库,如https://momentjs.com/

使用moment就可以了:

myData.results.forEach(result => {
  result.time = moment(result.time, 'YYYYMMDD').toDate(); 
  // or use .format('MM-DD-YYYY') or whatever format you like instead of .toDate()
});

答案 3 :(得分:1)

以下代码将解析相应日期对象中格式为"YYYYMMDD"的字符串。调用日期#toString()会将其打印为Tue Feb 03 2004 00:00:00,后跟您的时区。

您可能需要查看Date's documentation

var parseDate = function (str) {
  var year = parseInt(str.substr(0, 4), 10);
  var month = parseInt(str.substr(4, 2), 10) - 1;
  var day = parseInt(str.substr(6, 2), 10);
  return new Date(year, month, day);
}

例如:

var date = parseDate('20040203');
console.log(date.toString());
// prints "Tue Feb 03 2004 00:00:00 GMT+0100 (CET)"

因此可以在数据集中使用parseDate函数:

myData.results.forEach(result => {
  result.date = parseDate(result.time);
});