2012-12-20 3 views
7

理由の開示 - 私はjavascriptでひどいですが、勉強しようとしています!nvD3の新機能 - UNIXのタイムスタンプをX軸の日付として表示するにはどうしたらいいですか?

[1349013600] => 232

キー値は、その日から販売の$で、UNIXタイムスタンプである:

は、私はそれでこれらのようないくつかのエントリを持つ配列を持っています。私は現在、これらをマルチバーチャートでグラフ表示していますが、これはうまく機能しています。

問題は、現在、このように定義されている私のx軸、次のとおりです。

chart.xAxis 
.tickFormat(d3.format(',f')); 

それは、x軸のラベルとホバーツールチップに対するストレートintとしてのUNIXタイムスタンプを出力します。私はそれをD-M-Yまたは人間が判読可能な日付表示と同様に出力しようとします。

私が見つけた最も近いが、コードのこのビットは次のとおりです。

chart.xAxis.tickFormat(function(d) { 
     var dx = testdata[0].values[d] && testdata[0].values[d].x || 0; 
    return d3.time.format('%x')(new Date(dx)) 
}); 

しかし、私はそれをやっているかを理解するために苦労していますし、私の特定のチャートに実装することはできません。現在のコードは次のようになります。

nv.addGraph(function() { 
var chart = nv.models.multiBarChart() 
      .stacked(true) 

chart.xAxis 
    .tickFormat(d3.format(',f')); 

chart.yAxis 
    .tickFormat(function(d) { return '$' + d3.format(',f')(d) }); 

d3.select('#chart1 svg') 
    .datum(test_data2) 
    .transition().duration(500).call(chart); 

nv.utils.windowResize(chart.update); 

return chart; 
}); 

は、誰かがそれを動作させる方法を説明し、でした - もっと重要なこと - なぜですか?任意の指導を感謝!

答えて

4

JavaScriptのタイムスタンプは、ミリ秒単位であるため、使用する前にUnixスタンプに1000を掛けてください。

+1

チップをありがとう。日付は(SQLデータベースに格納されている)実際にはすでに読み込み可能な形式(YYYY/MM/DD)であるが、データベースから取り出したときにstrtotime(PHP関数)で変換している。私はこれが直観に反しているように思えますが、実際の値の割り当ては、軸をまたいで適切に配置するためにUNIXスタンプで行わなければならないと考えています。 とにかく、msではなくsにあるはずです。 – mcl

14

は私が報奨金を開くよう

ここ

は私

.tickFormat(function(d){return d3.time.format('%d-%b')(new Date(d));})

とトリックのために働いていたものです(オハイオ州D'!)とすぐに問題を解決しnvd3ためのデータを再フォーマットすることでしたこの後に軸が作成されます

+1

多分5人が役に立つとわかっていて、評判の点でも破損する可能性があります – CQM

+5

tickFormat関数の外で時刻形式を宣言して、あなたが望むすべての目盛りに新しい時刻形式のインスタンスを作成しないことをお勧めします表示する(遅くてメモリが浪費される)。同様に、ダンプの書式設定の副作用ではなく、前処理ステップとしてJavaScript Dateオブジェクトにデータを変換することをお勧めします。そうすれば、日付を参照する場所が他にもある場合は、UNIXの秒数よりもむしろ適切なDateオブジェクトです。 – mbostock

関連する問題