2017-06-06 49 views
0

我试图从PHP代码中读取一些AJAX json格式的数据。新日期()不适用于canvasjs&rangeBar

.../... 
    $data[]  = array("label" => $my_label, "y" => array("new Date($yci,$mci,$dci,$hci,$ici)","new Date($yco,$mco,$dco,$hco,$ico)")); 
} 

return json_encode($data, JSON_NUMERIC_CHECK); 

端JS

var chart = new CanvasJS.Chart("timeline", { 
    title: { 
     text: "How long an event occurred for on a given day" 
    }, 
    axisY: { 
     minimum: (new Date(2017, 5, 1, 00, 01)).getTime(),    
     interval: (24 * 60 * 60 * 1000 * 7), 
     labelFormatter: function(e){ 
     return CanvasJS.formatDate(e.value, "MM/DD"); 
     }, 
     gridThickness: 1 
    }, 

    toolTip:{ 
     contentFormatter: function (e) { 
     return "<strong>" + e.entries[0].dataPoint.label + "</strong></br> Start: " + CanvasJS.formatDate(e.entries[0].dataPoint.y[0], "DD - h:mm TT") + "</br>End : " + CanvasJS.formatDate(e.entries[0].dataPoint.y[1], "DD - h:mm TT"); 
    }}, 

    data: [ 
    { 
     type: "rangeBar", 
    dataPoints: JSON.parse(json.message), 
    } 
    ]      
}); 
chart.render(); 

} 

的问题是,无法显示DATAS。 我觉得新的日期并不是正确的。

[ 
{ 
    "label":"Room 200", 
    "y": 
     [ 
      "new Date(2017,5,06,14,20)", 
      "new Date(2017,5,08,14,20)" 
     ] 
}, 
{ 
    "label":"Room 200", 
    "y": 
     [ 
      "new Date(2017,5,08,14,21)", 
      "new Date(2017,5,10,14,21)" 
     ] 
}, 
{ 
    "label":"Room 201", 
    "y": 
     [ 
      "new Date(2017,5,11,15,59)", 
      "new Date(2017,5,13,15,59)" 
     ] 
} 
] 

此外,一些是从canvasjs样品与新日期怪异(),在每个代码的最后,有.getTime()这样的:新的日期()的getTime()

http://jsfiddle.net/canvasjs/xqgja576/

你能帮我吗?

回答

1

您在数组中提供的y值是字符串(“new Date(2017,5,06,14,20)”)。要评估这个y值作为日期,你可以使用eval函数。另外,CanvasJS不支持yAxis上的dateTime。作为一种解决方法,您可以调用getTime()来获取它的时间戳并将其设置为y值。

for (var i = 0; i < dataPoints.length; i++) { 
    for (var j = 0; j < dataPoints[i].y.length; j++) { 
    y = eval(dataPoints[i].y[j]); 
    //if(y.getTime) 
    dataPoints[i].y[j] = y.getTime(); 
    } 
} 

这里是一个jsfiddle与您的代码和变化。

1

你应该只通过从后端为UTC时间戳日期,因此,你需要woldn't任何客户端转换:

$start = new \DateTime("$yci/$mci/$dci $hci:$ici", new \DateTimeZone("UTC")); 
$end = new \DateTime("$yco/$mco/$dco $hco:$ico", new \DateTimeZone("UTC")); 
$data[] = array(
    "label" => $my_label, 
    "y" => array(
     // don't forget for '*1000 part' to convert 
     // from unix timestamp (seconds) to UTC timestamp (milliseconds) 
     $start->getTimestamp() * 1000, 
     $end->getTimestamp() * 1000, 
    ), 
); 

此外,您还需要考虑基于正确DateTime对象初始化你的代码(也许,你已经在你的代码的早些时候已经有了日期时间的对象,并且为了方便将它们解构为$yci, $mci, $dci, $hci, $ici变量)。您可以使用this手册页作为参考。

+0

是的问题修复 .../... $ data [] = array(“label”=> $ my_label,“y”=> array($ dci,$ dco)); } – Danard

+0

$ dci和$ dco包含一个时间戳值,并且该数组需要是整数而不是条带。 现在工作正常。 – Danard

+0

谢谢。 ;) – Danard

相关问题