2012-02-20 66 views
1

我試圖在我的Rails 3.1應用程序中使用Highcharts顯示標題爲「採購時間」的圖表。如何格式化Ruby數組以用作Highcharts中的數據

在我的函數中,我返回一個由created_at日期(日期格式)和購買價值(整數格式)組成的數組。當我在一個視圖中顯示所述功能,它看起來像這樣:

[2012-01-065002012-01-072502012-01-08130...] 

它轉換爲:[[2012-01-06,500],[2012-01-07,250],[2012-01- 08,130]

在Highcharts JS代碼,我對以下一系列的內部的看法:

series: [{ 
     name: '<%= User.product_names_by_user(current_user) %>', 
     pointInterval: <%= 1.day * 1000 %>, 
     pointStart: <%= User.from_the_first_purchase_date(current_user) %>, 
     data: <%= User.purchases_over_time(current_user) %> 
    }] 

from_the_first_purchase_date是簡單地返回日期格式的第一個購買日期的功能。

purchases_over_time是問題中的函數(如上所述)。

根據我對Highcharts API的理解(或缺少),我可以使用一個有兩個值的數組作爲圖表數據(Highcharts docs),而數組的第一個值表示x值,而第二是y值。

因此,我希望能夠繪製一段時間內的購買價值。在視圖中,我的圖表顯示,但沒有顯示數據,也沒有可見的繪圖點。

我也試着按以下格式的數組返回無濟於事:

[["2012-01-06", 500], ["2012-01-07", 250], ["2012-01-08", 130]] 

有什麼建議?

謝謝。

+0

感謝解析建議,這似乎是一個很好的解決方案。我最終沒有返回日期,只是將這些值傳遞給Highcharts,並且做了這個訣竅,但是謝謝你的迴應。 – mmichael 2012-03-06 18:52:55

回答

0

你必須指定datetime型爲X軸:

xAxis: { type: 'datetime' } 

和你的x值的格式應該是

[[Date.UTC(2012,0,6),500],[Date.UTC(2012,0,7),250],[Date.UTC(2012,0,8),130]] 

注意,JavaScript的月份定義Date.UTC從0開始(0 = 1月... 11 = 12月)

+0

我確實將xAxis指定爲類型日期時間,但是如何將我的數組中的第一個對象(日期格式爲2012-01-06)轉換爲上面指定的由JS識別的UTC格式?我試着把Date.utc(值),但utc不是日期類的方法。我也試過Time.utc(值),並得到一個錯誤'不能將Date轉換爲Integer'。有什麼建議麼? – mmichael 2012-02-20 14:08:24

+1

您可以嘗試JavaScript函數'Date.parse()'。所以'[「2012-01-06」,500]'會變成'[Date.parse(「2012-01-06」),500]'。這將自1970年1月1日以來的時間字符串轉換爲毫秒。 – dgw 2012-02-20 16:33:35