drbxr86044 2016-08-09 16:43
浏览 28
已采纳

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

  • 写回答

1条回答 默认 最新

  • dqusbxh44823 2016-08-09 16:54
    关注

    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); ?>);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?