PHP&;Javascript日期问题

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

我试图打印一个从API中提取的日期数组,其格式为YYYYmmdd,即20160701。当我将它们转换成更友好的格式,然后在Highcharts中打印它们时,它实际上会根据用于分离日期元素的运算符进行数学计算。显然这不是我想要它做的。所以第一个日期实际上是7减去1减去2016,结果是-2010。有人知道这是什么原因吗

PHP代码片段

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); ?>);