2015-05-06 39 views
2

我使用D3創建一些數據的線圖。我以毫秒爲單位給它一個日期,我想用小時和分鐘顯示它。我試過將它作爲新日期(myDate)的返回值傳遞給它,這也不起作用。D3 tickFormat錯誤,說明n.getMonth不是函數

這是我在運行時遇到的錯誤。 「未捕獲TypeError:n.getMonth不是一個函數」

我也試圖通過運行新的Date(time)來轉換所有的ms時間,但沒有任何改變。

這是我的圖表代碼。可變時間是指基於ms的時間測量數組。

function processData(allText) { 
    var allTextLines = allText.split(/\r\n|\n/); 
    var headers = allTextLines[0].split(','); 
var lines = []; 
for(var i =1, arrayLen = allTextLines.length; i<arrayLen; i++) { 
    var data = allTextLines[i].split(','); 
    if (data.length === headers.length) { 
     lines.push({time: Date.parse(data[0]), last: data[1]}); 
    } 
} 
var final = [] 
var d3Formater = d3.time.format("%m/%d/%Y"); 
for(var i = lines.length-1, base = (lines[lines.length-1].time - 14400001); i>0; i--) { 
    if(lines[i].time>base) { 

     var temp = new Date(lines[i].time) 
     console.log(temp); 
     final.push(d3Formater.parse(temp)); 
    } 
} 
delete lines; 
var xMin = new Date(d3.min(time)); 
var xMax = new Date(d3.max(time)); 

var vis = d3.select("#visualization"), 
    WIDTH = 1000, 
    HEIGHT = 500, 
    MARGINS = { 
     top: 20, 
     right: 20, 
     bottom: 20, 
     left: 50 
    }, 
    xScale = d3.scale.linear().range([MARGINS.left, WIDTH - MARGINS.right]).domain([xMin, xMax]), 
    yScale = d3.scale.linear().range([HEIGHT - MARGINS.top, MARGINS.bottom]).domain([yMin, yMax]), 

     xAxis = d3.svg.axis() 
      .scale(xScale) 
      .tickFormat(d3.time.format("%m-%d")), 

     yAxis = d3.svg.axis() 
      .scale(yScale); 

在此先感謝您。

+0

您需要的日期解析爲'Date'對象。你最近怎麼樣? –

+0

添加了編輯。 –

+0

好吧,你從哪裏得到'時間'?你需要解析所有的日期,而不僅僅是最大和最小。 –

回答

5

嘗試修改此行:

xScale = d3.scale.linear().... 

嘗試使用...

xScale = d3.time.scale()....