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

报告相同问题?

悬赏问题

  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法