2016-08-22 5 views
2

私は日時を2つの変数cx(年の日にする必要があります)とcy(時間+分/ 60)によると:CXとCYがNaNになるとd3はエラー捕捉されない例外TypeErrorを与えている:d3.min.jsはUncaught TypeErrorを返します:n.applyは関数ではありません

<!-- date format of d.date: 24-8-2016 9:47:38--> 
      var parseDayinYearFormat = d3.time.format('%j').parse; 
      var parseHourFormat = d3.time.format('%H').parse; 
      var parseMinuteFormat = d3.time.format('%M').parse; 

      <!-- add the objects--> 
      var circles = svg.selectAll("circle") 
       .data(data) 
       .enter() 
       .append("circle"); 
      var circleAttributes = circles 
       .attr("cx", function (d) { return +parseDayinYearFormat(d.date); }) 
       .attr("cy", function (d) { return +parseHourFormat(d.date)+(parseMinuteFormat(d.date)/60); }) 
       .attr("r", function (d) { return 20.0/(9-d.total); }) 
       .attr("class", function (d) {if (d.w>d.total-d.w) {return "cr"} else { return "cb" }}); 

しかし、D3はいいが再生されていないn.applyは助けてください機能

ではありません。

+0

未圧縮のd3.jsファイルをダウンロードし、コードに接続することをお勧めします。エラーが発生した場合、ブラウザの開発ツールでソースコードをチェックしてください。 –

+0

そのエリックを試みます。 – Rense

答えて

2

文字列全体を1つの書式オブジェクトで解析する必要があります。一連の解析で文字列を解析することはできません。

d3 version 3.x documentationを使用して、私はあなたの例で動作します。

var datestring = '24-8-2016 9:47:38'; 
 
var format = d3.time.format('%-d-%-m-%Y %-H:%-M:%-S'); 
 

 
console.log(format.parse(datestring)) 
 
// "2016-08-24T13:47:38.000Z" // (my time zone is UTC-4)
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>

24-8-2016 9:47:38は全くゼロパディングを示さない多くのフィールドを持っているあなたの例ので、私はそこことD3を伝えるために、%-d、すなわち、%と指定子の間にダッシュを使用することに注意してください最初はゼロではない。

はまた、あなたの例では、ない方法24が存在しないことに注意してください日の年、1と366の間である:24、右、明確だけの日ですか?

ただし、コードスニペットからは、文字列から日と時と分を抽出したいだけです。この単純な目的のためにd3.time.formatは、Dateというオブジェクトを提供しているので、余計かもしれません。オブジェクトを解析して日/時間/分を抽出する必要があります。このタスクに正規表現を使用することを検討してください。

+0

すぐにお返事ありがとうございます。しかし、私は数学をするために1時間と分が別々に必要です。確かに24日は月の日ですが、私はそれを1..366の範囲で変換する必要があります。 – Rense

+0

あなたは 'GetHours'のような' Date'のメソッドを使って必要な番号を抽出し(local-timezone-vs-UTCのバグに遭遇していないことを確認するためのテスト)、 'd3 .time.format'。 http://stackoverflow.com/q/8619879/500207を見ると、Dateオブジェクトをday-of-year(1〜366)に変換するためにd3を使うのはとても簡単です: '+ d3.time.format ( "%j")(format.parse(datestring)) 'は' 237'と評価されます。 –

関連する問題