我从后台取到数据,用highchart绘图后,发现y轴的值和提示框tooltip中显示的都是正确的,但x轴的时间没有正确显示,显示的是1970-01-01。
这个问题花了我将近一天的时间,才解决了。
查了很多博客,但是没有具体说到怎么解决,我看到最可靠的回答说是series中data的封装不正确。
series中data封装格式例子:
data:[
[Date.UTC(2010,1,1,10,20),120],
[Date.UTC(2010,1,1,10,20),120],
[Date.UTC(2010,1,1,10,20),120],
....
],
但是我从后台取到的数据是json格式的,在javascript中,data是ajax取到的数据,
一开始的代码是:
for(i=0;i<data.length;i++){
var tm=data[i].tm;
var ydata=data[i].ydata;
alldata.push([tm,ydata]);
}
highcharts中series部分代码:
series:{
data:alldata,
}
后来仔细看了series封装格式,发现要用Date.UTC这个函数,
就改了上面for循环中的代码,
for(i=0;i<data.length;i++){
var tm=data[i].tm;//tm应该是字符串类型
var ydata=data[i].ydata;
var someDate = new Date(Date.parse(tm));//把字符串类型专程Date类型
var tms=Date.UTC(someDate.getFullYear(), someDate.getMonth(), someDate.getDate(), someDate.getHours(),someDate.getMinutes());//进行Date.UTC处理alldata.push([tms,ydata]);
}
经过上述改动后,x轴显示了正确的时间格式。
实例如下:
/*document.write('<meta http-equiv="content-Type" content="text/html;charset=utf-8"/>');*/
var jq=jQuery.noConflict();
jQuery(document).ready(function() {
oneWaterLever();
})
function mthLever(){
var rz=0; //监测值
var min=0; //最小值
var max=0; //最大值
var alldata1=[];//highcharts中series的data值
var skcd="420116000125";
var dateBegin=document.getElementById("dateBegin3").value;
var dateEnd=document.getElementById("dateEnd3").value;
var mthurl="getMthData?skcd="+skcd+"&dateBegin="+dateBegin+"&dateEnd="+dateEnd;
jq.ajax({
type:"get",
url:mthurl,
global: false, //Ajax的范围
async:false,
dataType:"json",
success:function(data){
//alert(JSON.stringify(data));
if(data.name="rzdate"){
for(i=0;i<data.rzdate.length;i++){
rz=data.rzdate[i].rz;
tm=data.rzdate[i].tm;
var someDate = new Date(Date.parse(tm));
var tms=Date.UTC(someDate.getFullYear(), someDate.getMonth(), someDate.getDate(), someDate.getHours(),someDate.getMinutes());
alldata1.push([tms,rz]);
}
}
if(data.name="min"){
min=data.min;
}
if(data.name="max"){
max=data.max;
}
var container="mthproc-container"; //曲线容器
var formats='%Y-%m-%d';
var interval=3600*1000;
drawHighcharts(container,name,formats,interval,alldata1,min,max);
},
error:function(err){
// alert(err.toString());
$("#nodata").show();
}
});
function drawHighcharts(container,name,formats,interval,alldata1,min,max){
return new Highcharts.Chart({
chart:
{ renderTo:container,
type:'spline',
reflow:true,
},
legend: {
align: 'center',
backgroundColor: '#FFFFFF',
borderColor: '#909090',
borderWidth: 1,
borderRadius:5,
shadow:true,
},
credits: {
enabled: false // remove high chart logo hyper-link
},
title:
{
text: name+'水位过程线'
},
tooltip:
{
useHTML: true,
headerFormat: '<table><tr><td style="color:green">时间:{point.key}</td></tr>',
pointFormat: '<tr><td><b>水位:{point.y}</b></td></tr>',
footerFormat: '</table>',
xDateFormat:formats,
borderRadius:10,
crosshairs: {
width: 1,
dashStyle: 'solid',
}
},
plotOptions:{
spline:{
marker:{
enabled:false,
},
lineWidth:2,//线条粗细
},
series: {
marker: {
enabled: false
}
},
},
xAxis:{
title: {
text: '时间',
style: {
color: '#4572A7'
}
},
type: 'datetime',
minTickInterval: interval,//间隔值
labels: {
formatter: function () {
return Highcharts.dateFormat(formats,this.value);
},
rotation:30,//倾斜30度,防止数量过多显示不全
},
},
yAxis:{
gridLineWidth:1,
minorGridLineWidth:1,
title:{
text:'水位(米)',
style:{
color:'#4572A7'
},
},
labels:{
formatter:function(){
return this.value;
},
style:{
color:'#4572A7'
},
},
min: min, //最小
max:max,//最大
},
series:[{
name: '水位',
color: '#4572A7',
type: 'line',
tooltip: {
valueSuffix: '米',
},
data: alldata1,
},
//
],
});
}