2012-02-20 70 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