2012-12-20 7 views
7

Due Explanation - Ben javascript de korkunç, ama öğrenmeye çalışıyorum!Yeni nvD3'e - unix zaman damgasını x eksenindeki tarihler olarak nasıl gösterebilirim?

[1349013600] => 232

anahtar değeri o günden $ satış olduğunu, bir unix zaman geçerli:

İçinde bu gibi birkaç girişlerle bir dizi var. Şu anda bunları çok yönlü çalışan bir çoklu harita üzerinde çiziyorum.

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

Bu, x-ekseni, etiketler ve vurgulu ipucu karşı düz bir int unix zaman damgası verir:

sorun Bu gibi tanımlanır zaman, x-ekseni vardır. Ben D-M-Y veya benzer bir insan okunabilir tarih göstergesi olarak çıktısını almaya çalışıyorum.

Bulduğum en yakın bu kod biraz:

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)) 
}); 

Ama yapıyor ve benim özel grafik üzerinde uygulayamaz anlamak için mücadele ediyorum. Güncel kod şuna benzer:

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; 
}); 

birisi çalışması için nasıl açıklamak ve Could - daha da önemlisi - neden? Herhangi bir rehberlik için teşekkür ederiz!

cevap

4

JavaScript zaman damgası milisaniyedir, bu yüzden kullanmadan önce Unix pulunu 1000 ile çarpmalısınız.

+1

İpucu için teşekkürler. Tarihler (SQL db'de saklandığı gibi) halihazırda okunabilir bir biçimde (YYYY/AA/GG) halihazırdadır, ancak onları db'den çıkardığımda strtotime (PHP işlevi) ile dönüştürüyorum. Bunun tersine sezgisel gibi göründüğünü biliyorum, ancak eksen boyunca uygun bir şekilde yerleştirmek için gerçek değer atamasının unix damgada gerçekleşmesi gerektiğine inanıyorum. Neyse - zaten ms değil yerine yazılmalıdır. – mcl

14

Ben ödül açıldı

İşte

bana

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

ve hile çalıştı budur (oh d'!) En kısa sürede sorunu çözüldü nvd3 için veri yeniden biçimlendirmek oldu Bundan sonra eksen oluşturulur

+1

belki 5 kişi bu cevabı yararlı ve yardımsever buldum puanları bile – CQM

+5

kırılabilir Eğer tickFormat işlevinin dışında zaman biçimini bildirmenizi öneririm, böylece istediğiniz her kene için yeni bir saat biçimi örneği oluşturmuyorsunuzdur görüntülemek (yavaş ve boş hafıza olacak). Benzer şekilde, verilerinizi biçimlendirme onaylarının bir yan etkisi olarak değil, ön işlem adımı olarak JavaScript Date nesnelerine dönüştürmenizi öneririm. Böylece, tarihe başvurduğunuz başka yerler varsa, her zaman UNIX saniye veya daha kötüsü yerine bir dize olarak uygun bir Date nesnesi olur. – mbostock