2016-10-17 15 views
0

nvd3を使用した簡単なグラフを表示しています。文字列の日付から書式を設定するときにNaNが表示されます。明示的なjavascriptの日付でコードを使用すると(var testdataのコメントのように)。グラフが正しいことが示されます。ここに私のコードです。しかし、私は文字列を使いたいと思いますが、ここで何が間違っていますか?nvd3で日付をフォーマットする際にエラーが発生しました

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <link href="novus-nvd3-153163a/build/nv.d3.css" rel="stylesheet" type="text/css"> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.2/d3.min.js" charset="utf-8"></script> 
    <script src="novus-nvd3-153163a/build/nv.d3.js"></script> 
    <script src="novus-nvd3-153163a/examples/lib/stream_layers.js"></script> 
    <style> 
     text { 
      font: 12px sans-serif; 
     } 
     svg { 
      display: block; 
     } 
     html, body, { 
      margin: 0px; 
      padding: 0px; 
      height: 100%; 
      width: 100%; 
     } 
      #chart1 { 
      width : 600px; 
      height: 400px; 
      } 
    </style> 
</head> 
<body class='with-3d-shadow with-transitions'> 
<div id="chart1" ><svg></svg></div> 

<script> 
    var dates = [new Date(2013,1,1).getTime(), new Date(2014,1,1).getTime(), new Date(2015,1,1).getTime()]; 
    //var testdata = [{"key":"Sales","values":[{"x":dates[0],"y":2972948},{"x":dates[1],"y":2659151},{"x":dates[2],"y":11381859}]},{"key":"Rentability","values":[{"x":dates[0],"y":32.9},{"x":dates[1],"y":30.6},{"x":dates[2],"y":78.5}]}]; 
    var testdata = [{"key":"Sales","values":[{"x":"2013-1-1","y":2972948},{"x":"2014-1-1","y":2659151},{"x":"2015-1-1","y":11381859}]},{"key":"Rentability","values":[{"x":"2013-1-1","y":32.9},{"x":"2014-1-1","y":30.6},{"x":"2015-1-1","y":78.5}]}]; 
    testdata[0].type = "line"; 
    testdata[0].yAxis = 1; 
    testdata[1].type = "line"; 
    testdata[1].yAxis = 2; 

    nv.addGraph(function() { 
     var chart = nv.models.multiChart() 
      .margin({top: 30, right: 60, bottom: 50, left: 70}) 
      .color(d3.scale.category10().range()); 
     chart.xAxis.tickFormat(function(d) { 
      console.log(d); 
      return d3.time.format('%Y')(new Date(d)); 
      }); 
     chart.xAxis.tickValues(dates); 
     chart.yAxis1.tickFormat(d3.format(',.1f')); 
     chart.yAxis2.tickFormat(d3.format(',.1f')); 
     d3.select('#chart1 svg') 
      .datum(testdata) 
      .transition().duration(0).call(chart); 
     return chart; 
    }); 
</script> 
</body> 
</html> 
+0

説明をよくお読みください。コメントアウトされた行は**動作しないように見えますが、Javascriptの日付の行はコメントアウトされません。 –

+0

ありがとう、私は他の行をコメントアウトします。 –

答えて

0

残念ながら、AFAIK nv3dは文字列を日付としてサポートしていません。私は数ヶ月前に同じ問題に遭遇しました。

私は主にここに2つの解決策を参照してください。

  1. をJavaScriptは、あなたのメインデータソース、JavaScriptの日付にあなたの文字列を変換するために、Date.parse()を使用している場合。
  2. このJavaScriptをサーバーで生成する場合は、サーバーコードを変更してJavaScriptの日付を表示します。

タイムゾーンの問題を回避するには、Date.parse()のドキュメントをよくお読みください。 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date/parse

ISO形式の文字列をDate.parse()に渡すと、(タイムゾーンが指定されていない限り)UTC値が取得されます。そのため、Date.parse("2012-03-02")は、レンダリング時に2012-03-01 23:00:00などの効果が発生する可能性があります(GMTタイムゾーンにない場合は、ローカルタイムゾーン設定を使用します)。

+0

面白いことに、私は既に他の例の日付としてstringとnv3dを使用しています。 –

+0

OK、ここでも実際の例として投稿してみませんか?何が間違っているのかを見つけるのに役立つでしょう...私が覚えている限り、それはいくつかのタイプのチャートでは動作しますが、他のものでは動作しないかもしれません... –

+0

これはmultiBarChartです。ここでは文字列の日付が受け入れられます、異なります?すべての日付を解析した後にチャートが機能する理由とそれ以外のものがチャートと独立している理由私はものをレンダリングするためにたくさんのスクリプトを使用しています。文字列の日付で作業するマルチバーチャートを作成し、時間がかかるでしょう。 –

関連する問題