2012-12-20 16 views
7

Tuyên bố tiết lộ - Tôi quá kinh khủng với javascript, nhưng cố gắng tìm hiểu!Mới đối với nvD3 - làm cách nào để tôi có thể đặt dấu thời gian unix xuất hiện dưới dạng ngày trên trục x?

Tôi có một mảng với một vài mục như thế này trong đó:

[1349013600] => 232

Điều quan trọng là một dấu thời gian unix, giá trị là $ doanh thu từ ngày hôm đó. Tôi hiện đang vẽ đồ thị trên biểu đồ nhiều thanh, điều này hoạt động rất tốt.

Vấn đề là tôi trục x, mà hiện nay được định nghĩa như thế này:

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

Nó ra dấu thời gian unix như một int thẳng chống lại các nhãn trục x và di chuột tooltip. Tôi muốn thử và đưa nó ra như D-M-Y hoặc một chỉ báo ngày có thể đọc được của con người.

Gần nhất tôi đã tìm thấy là chút mã nà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)) 
}); 

Nhưng tôi đang gặp khó khăn để hiểu những gì nó đang làm và không thể thực hiện trên bảng xếp hạng đặc biệt của tôi. Mã hiện tại trông giống như sau:

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

Ai đó có thể giải thích cách làm cho nó hoạt động và - quan trọng hơn - tại sao? Đánh giá cao bất kỳ hướng dẫn nào!

Trả lời

4

Dấu thời gian JavaScript là mili giây, vì vậy bạn nên nhân dấu Unix trước 1000 trước khi sử dụng.

+1

Cảm ơn bạn đã tìm mẹo. Các ngày (như được lưu trữ trong db SQL) thực sự ở định dạng có thể đọc được (YYYY/MM/DD), nhưng tôi đang chuyển đổi chúng với strtotime (hàm PHP) khi tôi kéo chúng ra khỏi db. Tôi biết điều này có vẻ phản trực giác nhưng tôi tin rằng việc gán giá trị thực tế phải xảy ra trong unix stamp để không gian chúng một cách thích hợp trên trục. Dù sao - phải đã ở trong s thay vì ms. – mcl

14

tôi giải quyết vấn đề càng sớm càng tôi mở bounty (d'oh!)

Đây là những gì làm việc cho tôi

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

và các trick là để định dạng lại dữ liệu cho nvd3 SAU đây là trục được tạo

+1

có thể nếu 5 người tìm thấy câu trả lời này hữu ích và upvoted tôi có thể phá vỡ ngay cả trên các điểm danh tiếng – CQM

+5

Tôi khuyên bạn nên tuyên bố định dạng thời gian bên ngoài chức năng tickFormat, để bạn không tạo ra một thể hiện định dạng thời gian mới cho mỗi đánh dấu bạn muốn để hiển thị (sẽ chậm và lãng phí bộ nhớ). Tương tự như vậy, tôi khuyên bạn nên chuyển đổi dữ liệu của mình thành các đối tượng Ngày JavaScript như là một bước tiền xử lý, thay vì là tác dụng phụ của việc định dạng các dấu tích. Bằng cách đó, nếu có những nơi khác mà bạn đề cập đến ngày, nó luôn luôn là một đối tượng Date đúng hơn là UNIX giây hoặc tệ hơn, một chuỗi. – mbostock

Các vấn đề liên quan