PHP和Javascript日期问题

I'm trying to print out an array of dates pulled from an API, which come out formatted as YYYYmmdd, i.e. 20160701. When I convert them to a friendlier format and then go to print them in Highcharts, it actually will do a mathematical calculation based on the operator being used to separate the date elements. Obviously that's not what I want it to do. So the first date is actually performing 7 minus 1 minus 2016, resulting in the -2010. Does anyone know what is causing this?

PHP Snippet

foreach ($arr['rows'] as $item){
 $dates[] = DateTime::createFromFormat('Ymd', $item[0])->format('m-d- Y');
 }

Javascript Highchart Plugin

$('#myChart').highcharts({
          xAxis: {
              categories: [
                <?php
                echo implode(',', $dates);
                ?>
              ]
          },

What the dates end up looking like:

Output Image

The problem is that you're not injecting any quotes in the Javascript source.

What you get is something like:

$('#myChart').highcharts({
      xAxis: {
          categories: [ 7-1-2016 ]   //  <--- should be [ "7-1-2016" ]
      }
});

which is evaluated as categories: [ -2010 ] on the Javascript side.

You should do:

$('#myChart').highcharts({
      xAxis: {
          categories: [
            <?php
              echo '"'.implode('","', $dates).'"';
            ?>
          ]
      }
});

Or if you prefer to have this fixed in the PHP code that is building this array:

foreach ($arr['rows'] as $item){
    $dates[] = DateTime::createFromFormat('Ymd', $item[0])->format('"m-d-Y"');
}

EDIT: as suggested by jlbriggs, a better approach would be to use json_encode().

At least on $dates ...

$('#myChart').highcharts({
      xAxis: {
          categories: <?php echo json_encode($dates); ?>
      }
});

... or on the whole object passed to highcharts() (assuming it's entirely built on the PHP side):

$('#myChart').highcharts(<?php echo json_encode($highChartsObject); ?>);