将毫秒数据分组到日期组

时间:2017-03-12 15:28:00

标签: javascript date

我有类似的东西

{
    1489330777089: 100, // 12 March
    1489330824346: 45,  // 12 March
    1489330877089: 90,  // 13 March
    1489330824346: 120, // 13 March
    .....
}

密钥来自Date.now(),因为它们已创建,值为整数。

我想将这些数据绘制成图表,例如条形图,其中日期为x轴。

如何使用Javascript将这些数据分组到日期中,将整数值汇总在一起。预期结果为:

{
    12 March 2017: 145 // 100 + 45
    13 March 2017: 210 // 90 + 120
    ...
} 

(我在React应用中使用此功能,如果需要注意这一点。另外,使用Firebase存储数据)

谢谢!

3 个答案:

答案 0 :(得分:0)

这会遍历这些值,将它们截断为一天,并使用分组值的总和进行输出

let source = {
    1489330777089: 100,
    1489330824346: 45, 
    1489330877089: 90, 
    1489330824346: 120,
}

let grouped = Object.keys(source).reduce((output, key) => {
  let date = new Date(Number(key)),
      groupedDate = new Date(date.getFullYear(), date.getMonth(), date.getDay());

  if (typeof output[groupedDate] === 'undefined') output[groupedDate] = 0;

  output[groupedDate] += source[key];

  return output;
}, {});

您可能想要更改输出属性字符串/运算符/截断单位,但通过上面代码中的小改动,这应该很容易。

答案 1 :(得分:0)

您可以使用ISO日期进行分组。也许你需要在正确的当地时间使用一个.set。



var data = { 1489330777089: 100, 1489330824346: 45, 1489330877089: 90, 1489330824346: 120 },
    grouped = {};

Object.keys(data).forEach(function (k) {
    var date = (new Date(+k +1000*60*60*24)).toISOString().slice(0, 10);
    grouped[date] = grouped[date] || 0;
    grouped[date] += data[k];
});

console.log(grouped);




答案 2 :(得分:0)

你可以这样做

var date_obj={
    1489330777089: 100, // 12 March
    1489330824346: 45,  // 12 March
    1489330877089: 90
 }
 var tempData = {};
for ( var index in date_obj ) {
  if ( date_obj[index] != "undefined" ) { 
      var milisec=  parseInt(index);
      var get_data= new Date(milisec);
var str_date=get_data.toString();
  var date_str=  str_date.substr(0,15);
  if(typeof(tempData[date_str])=== "undefined"){
    tempData[date_str] = parseInt(date_obj[index]); 
  }else{
      tempData[date_str] = tempData[date_str]+parseInt(date_obj[index]); 
  }
  } 
 }
data = tempData;
console.log(data);