【问题标题】:Date manipulations in D3.jsD3.js 中的日期操作
【发布时间】:2012-05-04 14:46:27
【问题描述】:

如何按数据点列表分组并按天聚合它们?例如,给定这个列表:

2012-03-18T00:00:04 
2012-03-18T00:05:03 
2012-03-19T00:10:04
2012-03-19T00:15:03 
2012-03-19T00:20:03 
2012-03-19T00:25:03

我想拥有:

2012-03-18,2
2012-03-19,4

【问题讨论】:

    标签: javascript d3.js


    【解决方案1】:

    假设您将数据点作为一个名为points的字符串数组

    var map = {};
    points.forEach(function(x) {
      var s = x.split("T")[0];
      if(map.hasOwnProperty(s)) { 
        map[s]++;
      }
      else {
        map[s] = 1;
      }
    });
    

    这为您提供了该日期每次出现的计数。

    例子

    js> points
    ["2012-03-18T00:00:04", "2012-03-18T00:05:03", "2012-03-19T00:10:04", "2012-03-19T00:15:03", "2012-03-19T00:20:03", "2012-03-19T00:25:03"]
    js> points.forEach(function(x) {
      var s = x.split("T")[0];
      if(map.hasOwnProperty(s)) { 
        map[s]++;
      }
      else {
        map[s] = 1;
      }
    });
    js> map
    ({'2012-03-18':2, '2012-03-19':4})
    

    【讨论】:

      【解决方案2】:

      我不得不假设T 将日期与时间分开。您可以使用正则表达式或子字符串提取日期,并将其添加到计数中。我使用了正则表达式。

      http://jsfiddle.net/p3ADG/

      var count = {};
      
      var input = [
       "2012-03-18T00:00:04",
       "2012-03-18T00:05:03",
       "2012-03-19T00:10:04",
       "2012-03-19T00:15:03",
       "2012-03-19T00:20:03",
       "2012-03-19T00:25:03"
       ];
      
      for(var i = 0; i < input.length; i++) {
        var date = /(.*)T/.exec(input[i])[1];
          if(!count[date]) {
            count[date] = 1;
          }
          else {
            count[date] += 1;
          }
      }
      
      for (var date in count) {
        document.write(date+","+count[date]+"<br>");   
      }
      

      【讨论】:

        猜你喜欢
        • 2019-10-12
        • 1970-01-01
        • 1970-01-01
        • 2012-01-08
        • 1970-01-01
        • 2017-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多