Connor McManus Connor McManus - 3 months ago 26
jQuery Question

PHP & Javascript Date Issue

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

Answer

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"');
}
Comments