2017-05-18 105 views
1

我试图返回高分辨率样本中的数据,我尝试了很多,但是我的数据输出是相当不同的,然后显示wihtin highcart,当我尝试读取我的数据时图表数据不显示高达以json格式返回的数据显示不正确

谁能帮我出

这里是由高图表显示样本数据

?([ 
[Date.UTC(2013,5,2),0.7695], 
[Date.UTC(2013,5,3),0.7648], 
[Date.UTC(2013,5,4),0.7645], 
[Date.UTC(2013,5,5),0.7638], 
[Date.UTC(2013,5,6),0.7549], 
[Date.UTC(2013,5,7),0.7562], 
[Date.UTC(2013,5,9),0.7574], 

这follwoing我的返回数据的认沽

["[Date.UTC(2012,05,18), 14.38], 
"," 
[Date.UTC(2012,05,21), 14.15], 
"," 
[Date.UTC(2012,05,22), 15.11], 
"," 
[Date.UTC(2012,05,23), 14.96], 
"," 
[Date.UTC(2012,05,24), 14.98], 
"," 
[Date.UTC(2012,05,25), 15.05], 
"," 
[Date.UTC(2012,05,28), 14.8], 
"," 
[Date.UTC(2012,05,29), 14.71], 
"," 
[Date.UTC(2012,05,30), 14.72],", 

这是我的代码

  $chartData = array(); 
     foreach ($data as $key => $value) { 

      $date = explode('-', $value['date']); 
      $new_date = $date[0]. "," .$date[1]. "," .$date[2]; 
      $value = $value['closing_rate']; 
      $datetime = 'Date.'. 'UTC('.$new_date.')'; 
      $chartData[] = "[$datetime, $value]"; 
     } 
     echo json_encode($chartData, JSON_NUMERIC_CHECK); 
+0

试试这个$ chartData [] = array($ datetime,$ value); –

回答

2

在第一个块显示示例数据中包含的Javascript代码; Date.UTC()是JavaScript Date类的方法UTC的调用。 JSON不能包含代码,它只包含数据。

在第二个列表中,您生成了一些包含Javascript代码的字符串。 JSON在Javascript中正确解码,但其中包含的是一系列看起来像第一个列表中的代码的字符串。你不需要代码,但它的结果。

Date.UTC()是JavaScript Date类的那computes and returns一个静态方法:

返回值

表示自January 1, 1970, 00:00:00在给定的日期对象的毫秒数的数字,通用时间。

有很多方法可以在PHP中生成相同的值。最简单的一个是让DateTime类做繁重:

// Use the UTC timezone 
$tz = new DateTimeZone('UTC'); 
// Prepare the data here 
$chartData = array(); 
foreach ($data as $key => $value) { 
    $date = new DateTime($value['date'], $tz); 
    // DateTime::format('U') returns the number of seconds since Jan 1, 1970 
    // multiply by 1000 to get the number of milliseconds 
    $chartData[] = array(1000 * $date->format('U'), $value['closing_rate']); 
} 


echo json_encode($chartData, JSON_NUMERIC_CHECK); 

备注

如果您正在运行PHP的7以上版本的代码,那么你可以使用DateTime::format('v')得到毫秒数:

foreach ($data as $key => $value) { 
    $date = new DateTime($value['date'], $tz); 
    $chartData[] = array($date->format('v'), $value['closing_rate']); 
} 
+0

你知道你总是为你竖起大拇指,但有2个问题,如果你不介意我问1)日期显示为2013年2014年2015年2016年2017年不是3月1日2015年3月2日2015年是因为我显示数据所有5年? 2)有4个值name1:value name 2 then value:我怎么改变它? –

+0

我在代码上做了一个修正,放在'$ chartData'中的每个数组的第二个值是'$ value ['closing_rate']'(之前它是'$ value',它不正确)。 – axiac

+0

*“日期显示为2013年2014年2015年2016年2016年2017年不是3月1日2015年3月2日2015年”* - 我猜你正在谈论你在浏览器中看到的内容。首先,您应该检查(在浏览器的开发人员工具中)您从后端获得正确的值。然后,如果它们是正确的,我想你可以配置图表JS库在它显示的日期中使用一种或另一种格式。检查它的文档。 – axiac