PHP&;Javascript日期问题
我试图打印一个从API中提取的日期数组,其格式为YYYYmmdd,即20160701。当我将它们转换成更友好的格式,然后在Highcharts中打印它们时,它实际上会根据用于分离日期元素的运算符进行数学计算。显然这不是我想要它做的。所以第一个日期实际上是7减去1减去2016,结果是-2010。有人知道这是什么原因吗 PHP代码片段PHP&;Javascript日期问题,javascript,php,jquery,highcharts,Javascript,Php,Jquery,Highcharts,我试图打印一个从API中提取的日期数组,其格式为YYYYmmdd,即20160701。当我将它们转换成更友好的格式,然后在Highcharts中打印它们时,它实际上会根据用于分离日期元素的运算符进行数学计算。显然这不是我想要它做的。所以第一个日期实际上是7减去1减去2016,结果是-2010。有人知道这是什么原因吗 PHP代码片段 foreach ($arr['rows'] as $item){ $dates[] = DateTime::createFromFormat('Ymd', $ite
foreach ($arr['rows'] as $item){
$dates[] = DateTime::createFromFormat('Ymd', $item[0])->format('m-d- Y');
}
Javascript Highchart插件
$('#myChart').highcharts({
xAxis: {
categories: [
<?php
echo implode(',', $dates);
?>
]
},
$(“#我的图表”).高图({
xAxis:{
类别:[
]
},
日期最后的样子:
问题在于您没有在Javascript源代码中注入任何引号 你得到的是:
$('#myChart').highcharts({
xAxis: {
categories: [ 7-1-2016 ] // <--- should be [ "7-1-2016" ]
}
});
或者,如果您希望在构建此数组的PHP代码中修复此问题:
foreach ($arr['rows'] as $item){
$dates[] = DateTime::createFromFormat('Ymd', $item[0])->format('"m-d-Y"');
}
编辑:正如jlbriggs所建议的,更好的方法是使用json\u encode()
至少在$dates
$('#myChart').highcharts({
xAxis: {
categories: <?php echo json_encode($dates); ?>
}
});
这可能是
format
调用中的额外空间吗?format('m-d-Y');
应该是format('m-d-Y');
,对吗?为什么不直接使用datetime x轴类型,并跳过这一麻烦呢?如果要这样做,那么使用php的json_encode()函数,而不是introde(),即:xAxis:{categories:}虽然这是可行的,但要实现json_encode()显式为您所做的工作,基本上还有很长的路要走(容易出错)。@jlbiggs-是的。我着重于“为什么它不能按预期工作”的解释,但您当然是完全正确的。相应地对答案进行了编辑。
$('#myChart').highcharts({
xAxis: {
categories: <?php echo json_encode($dates); ?>
}
});
$('#myChart').highcharts(<?php echo json_encode($highChartsObject); ?>);