2012-10-07 23 views
2

我在d3中有一個日期比例,我正在尋找x.domain()[0]到第一天的月份,x.domain()[ 1]到本月的最後一天。假設數據集是一樣的東西最簡單的方法來舍入D3.js中的日期比例

data : [ 
{date: '2011-12-31', amount: 200}, 
{date: '2012-01-01', amount: 100}, 
{date: '2012-01-02', amount: 300}, 
{date: '2012-01-03', amount: 400}, 
{date: '2012-02-01', amount: 400} 
] 

它是一個人爲的例子,但基本上是在這種情況下蓋域中月份。尋找一個簡單的d3esque解決方案。

回答

5

我覺得你要找的是.nice()函數,它使得域名開始和結束於好值(在你的情況下,是本月的第一個和最後一個)。你仍然需要過濾你的數據,我認爲沒有什麼魔法可以自動確定你想在這種情況下顯示一月份與十二月份還是二月份。

var data = [ 
    {date: new Date(2011,11,31), amount: 200}, 
    {date: new Date(2012,0,1), amount: 100}, 
    {date: new Date(2012,0,2), amount: 300}, 
    {date: new Date(2012,0,3), amount: 400}, 
    {date: new Date(2012,1,1), amount: 400} 
]; 

var month = data.filter(function (d) { return d.date.getMonth() === 0; }); 

var x = d3.time.scale() 
    .domain(d3.extent(month, function(d) { return d.date; })) 
    .range([0, width]) 
    .nice(d3.time.month); 

你可以在http://bl.ocks.org/3849376看到一個這樣的例子。

+0

重新審視這個問題 - 它給我1月1日 - 2月1日 - 反正得到1月1日 - 1月31日? – imrane

+0

@imrane可能太遲了,但是不要在2月份添加數據 - 示例中的最後一個數據條目是在2月1日。 – Thor84no