在a轴上具有日期时间的HighChart

时间:2012-10-31 11:15:51

标签: php ajax highcharts

我不知道我在这段代码中出错了。
我需要做的是使用数据库中的值绘制HighCharts绘图。价值观随时都可能发生变化 - x轴应标记为“11月30日”作为最后一点,直到“10月30日”为第一点,即30天(我想仅在30天内显示图表)。这是一个例子,日期可以随时间变化。 - JS通过ajax发送请求,结果以json格式返回。这是其中一行:{"time":"2012-08-07 21:15:05","value_1":"1.241110","value_2":"1.241103"} 该图有两行(value_1和value_2),并且都对应于x轴上的相同时间。
我在某处读到了必须将日期格式转换为UTC的地方。这是功能

function get_and_display_data(symbol_1,price_1,period_1,bars_1,constraints_1){

var highchartsOptions = Highcharts.setOptions(Highcharts.theme);

var options = {
    chart: {
        renderTo: 'graph',
        type: 'line',
        marginRight: 130,
        marginBottom: 25,
        reflow: false,
        borderWidth: 0
    },
    title: {
        text: 'Data',
        x: -20 //center
    },
    xAxis: {
        type:'datetime',
        dateTimeLabelFormats: {
            year: '%b \'%y'
        }
    },
    yAxis: {
        title: {
            text: 'This is a text !'
        },
        plotLines: [{
            value: 0,
            width: 1,
            color: '#808080'
        }]
    },
    tooltip: {
        formatter: function() {
            return '<b>'+ this.series.name +'</b><br/>'+
            Highcharts.dateFormat ('%A, %b %e, %Y', this.point.x) +': '+ this.y;
        }
    },
    legend: {
        layout: 'vertical',
        align: 'right',
        verticalAlign: 'top',
        x: -10,
        y: 100,
        borderWidth: 0
    },
    plotOptions: {
        series: {
            marker: {
                enabled: false,
                states: {
                    hover: {
                        enabled: true,
                        radius: 3
                    }
                }
            }
        }
    },
    series: [{
        name: ''
        }, {
        name: ''
    }]
}
$.ajax({
    url: url_base+"show_page/graph_data.do",
    type: 'POST',
    data: 'symbol='+symbol_1+"&price="+price_1+"&period="+period_1+"&bars="+bars_1+"&constraints="+constraints_1,
    cache: false,
    dataType: "json",
    success: function(html) {
        var data_array = [];
        var data_1 = [];
        var data_2 = [];
        var i = 0;
        var time_x_axis = [];
        var sLegend = [];
        try{
            data_array = html;
            sLegend = price_1.split(',');
            if(html == null){
                alert('No data was found. Try it again ');
            }else{
                for(i=0;i<data_array.length;i++)
                {
                    time_x_axis[i] = data_array[i]['time'];
                    data_1[i] = '['+Date.UTC(time_x_axis[i].substr(0, 4), time_x_axis[i].substr(5,2), time_x_axis[i].substr(8,2), time_x_axis[i].substr(11,2), time_x_axis[i].substr(14,2), time_x_axis[i].substr(17,2))+','+parseFloat(data_array[i]['value_1'])+']';
                    data_2[i] = '['+Date.UTC(time_x_axis[i].substr(0, 4), time_x_axis[i].substr(5,2), time_x_axis[i].substr(8,2), time_x_axis[i].substr(11,2), time_x_axis[i].substr(14,2), time_x_axis[i].substr(17,2))+','+parseFloat(data_array[i]['value_2'])+']';                        
                }
            }
        }catch(e){ }
        options.series[0].data = '['+data_1+']';
        options.series[0].name = sLegend[1];
        options.series[1].data = data_2;
        options.series[1].name = sLegend[2];
        chart = new Highcharts.Chart(options);
    }
});}

这里我得到html变量的结果并将它们影响到Data_array []。 因为系列数据应采用 Data:[[],[],[] .. []] 的格式,这就是我把* options.series [0] .data ='[ '+ data_1 +']'; *。
对于* data_1 [i] *,我必须减去获得年,月,日,小时,分钟和秒的时间。
我在代码中缺少什么?

1 个答案:

答案 0 :(得分:0)

您可以尝试以下更改吗?

制作data_1 [i]&amp; data_2 [i]使用[...,...]代替'[' + ... + ',' + ... + ']'作为数组(这实际上导致字符串而不是数组)

                data_1[i] = [parseInt(Date.UTC(time_x_axis[i].substr(0, 4), time_x_axis[i].substr(5,2), time_x_axis[i].substr(8,2), time_x_axis[i].substr(11,2), time_x_axis[i].substr(14,2), time_x_axis[i].substr(17,2))),parseFloat(data_array[i]['value_1'])];
                data_2[i] = [parseInt(Date.UTC(time_x_axis[i].substr(0, 4), time_x_axis[i].substr(5,2), time_x_axis[i].substr(8,2), time_x_axis[i].substr(11,2), time_x_axis[i].substr(14,2), time_x_axis[i].substr(17,2))),parseFloat(data_array[i]['value_2'])];         

从系列数据中删除'[' + ... + ']',因为data_1已经是数组数组,您不需要使用任何连接添加方括号。无论如何,你的方法会因为连接而再次产生字符串。

    options.series[0].data = data_1;               

相关: Highcharts returning error 14