我正在尝试打印出一组从 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);
?>
]
},
日期最终会是什么样子:
最佳答案
问题是您没有在 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/