2015-07-11 74 views
-2

的特定元素的值我有這樣一個JSON例如:D3得到JSON例子

[ 
{"emp_name":"ABC","works_on":"wheels","time_from":"2012-03-27 10:00:00","time_to":"2012-03-27 12:00:00"}, 
{"emp_name":"xyz","works_on":"seat","time_from":"2012-03-27 14:00:00","time_to":"2012-03-27 17:00:00"}, 
{"emp_name":"ABC","works_on":"painting","time_from":"2012-03-28 10:00:00","time_to":"2012-03-28 12:00:00"}, 
{"emp_name":"xyz","works_on":"tube","time_from":"2012-03-28 14:00:00","time_to":"2012-03-28 17:00:00"}, 
{"emp_name":"pqr","works_on":"engine","time_from":"2012-03-29 10:00:00","time_to":"2012-03-29 12:00:00"}, 
{"emp_name":"ABC","works_on":"wiper","time_from":"2012-03-29 14:00:00","time_to":"2012-03-29 17:00:00"}, 
{"emp_name":"mno","works_on":"air_cooler","time_from":"2012-03-30 10:00:00","time_to":"2012-03-30 12:00:00"}, 
{"emp_name":"ABC","works_on":"wheels","time_from":"2012-03-30 14:00:00","time_to":"2012-03-30 17:00:00"}, 
] 

我不知道是否有一種方法來計算每個用人單位累計工作時間。

+0

SO不適合寫作一切。給我們一個在jsfiddle左右的現有項目。 – kwoxer

回答

2

如果我明白你的問題正確,您要計算總工作時間爲每個emp_name

只需要使用此代碼:由emp_name

var data = [ 
     { "emp_name": "ABC", "works_on": "wheels", "time_from": "2012-03-27 10:00:00", "time_to": "2012-03-27 12:00:00" }, 
     { "emp_name": "xyz", "works_on": "seat", "time_from": "2012-03-27 14:00:00", "time_to": "2012-03-27 17:00:00" }, 
     { "emp_name": "ABC", "works_on": "painting", "time_from": "2012-03-28 10:00:00", "time_to": "2012-03-28 12:00:00" }, 
     { "emp_name": "xyz", "works_on": "tube", "time_from": "2012-03-28 14:00:00", "time_to": "2012-03-28 17:00:00" }, 
     { "emp_name": "pqr", "works_on": "engine", "time_from": "2012-03-29 10:00:00", "time_to": "2012-03-29 12:00:00" }, 
     { "emp_name": "ABC", "works_on": "wiper", "time_from": "2012-03-29 14:00:00", "time_to": "2012-03-29 17:00:00" }, 
     { "emp_name": "mno", "works_on": "air_cooler", "time_from": "2012-03-30 10:00:00", "time_to": "2012-03-30 12:00:00" }, 
     { "emp_name": "ABC", "works_on": "wheels", "time_from": "2012-03-30 14:00:00", "time_to": "2012-03-30 17:00:00" } 
    ]; 

此功能d3.nest().key(function (d) { return d.emp_name })會將您的數據。

var nest = d3.nest().key(function (d) { return d.emp_name }) 
     .rollup(function(v) { 
      return d3.sum(v, function (d) { 
       //Convert time to standard format 
       var sTimeTo = d.time_to; 
       var splitedTimeTo = sTimeTo.split(" "); 
       splitedTimeTo = splitedTimeTo[0] + "T" + splitedTimeTo[1]; 

       var sTimeFrom = d.time_from; 
       var splitedTimeFrom = sTimeFrom.split(" "); 
       splitedTimeFrom = splitedTimeFrom[0] + "T" + splitedTimeFrom[1]; 
       //cal difference between time_to and tim_from 
       var timeTo = Date.parse(splitedTimeTo); 
       var timeFrom = Date.parse(splitedTimeFrom); 
       var deltaTime = timeTo - timeFrom; 
       //convert date from milli s to an hour 
       deltaTime = Math.ceil(deltaTime/(1000 * 3600)); 
       console.log(deltaTime); 

       return deltaTime; 
      }); 
     }) 
     .entries(data); 

    console.log(JSON.stringify(nest)); 

完成jsfiddel here

+0

而不是手動提供數據,是否有可能加載包含上述數據的外部json數據文件(data.json)並使用d3.nest ...? –

+1

是的,你可以從json文件加載數據。檢查[this](http://plnkr.co/edit/zKNTjw1Kl2R35JGTWJQM)示例。我將你的問題改爲有效的json並重新計數。這個示例可以幫助你實現'd3.json()'函數,[這裏](http://bl.ocks.org/d3noob/8329447)。 – Gabriel

+0

非常感謝,非常感謝。 –