javascript - PHP 和 Javascript 日期问题

标签 javascript php jquery highcharts

我正在尝试打印出一组从 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);
                ?>
              ]
          },

日期最终会是什么样子:

Output Image

最佳答案

问题是您没有在 Javascript 源代码中注入(inject)任何引号。

你得到的是这样的:

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

Javascript 端被评估为 categories: [ -2010 ]

你应该这样做:

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

或者,如果您希望在构建此数组的 PHP 代码中修复此问题:

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

编辑:正如 jlbriggs 所建议的,更好的方法是使用 json_encode()

至少在 $dates ...

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

... 或传递给 highcharts() 的整个对象(假设它完全构建在 PHP 端):

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

关于javascript - PHP 和 Javascript 日期问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38856293/

相关文章:

javascript - 使用 Javascript 上传文件,无需用户干预

javascript - Spotify 网络播放器 - 更新 url 而不刷新页面

php - 在 INSERT 语句中使用多个 SELECT 防止竞争条件

javascript - Asp.Net 控制值在 Jquery 中返回未定义

javascript - 创建元素并独立滚动它们

javascript - 如何获取GET请求传递的列表数据?

javascript - jquery - 通过 POST (ajax) 发送 JSON 数据并在 php 中检索

php - 日历自定义 [突出当前月份]

jquery - 如何使用 jQuery 强制悬停状态?

javascript - 有可能吗?从 Click 插入 Frame/Iframe 或 (webview) - Javascript/Jquery/HTML