首页 > 解决方案 > 谷歌图表错误的数据排序

问题描述

我想按日期对数据进行排序,但由于某种原因它没有正确排序,例如

['Sep 28',2],
['Sep 27',2],
['Oct 02',1],
['Oct 01',1],
['Sep 28',1],
['Sep 27',4],
['Sep 26',2],

所以它不是按日期排序的。

我已经使用 php 从数据库中获取数据

foreach ($array as $row){
    echo "['".date('M d', strtotime($row['date']))."',".$row['views']."],";
}

数据排序正确,这是图表示例,您可以看到问题

https://codepen.io/anon/pen/bmzGdb

标签: phpchartsgoogle-visualization

解决方案


数据在 javascript 中生成一个字符串,因此它会像字符串一样排序。
相反,请在 javascript 中使用真实日期。
就像是...

foreach ($array as $row){
    echo "[new Date(".strtotime($row['date'])." * 1000),".$row['views']."],";
}

然后您可以使用选项格式化轴的日期...

hAxis: {
  format: 'MMM dd'
}

更新

由于格式不包括时间,x 轴可能会重复标签。
为了防止,使用自定义刻度。

hAxis: {
  format: 'MMM dd',
  ticks: data.getDistinctValues(0)
}

data谷歌数据表在哪里...

更新 2

刻度的另一种选择是根据图表的日期范围构建自己的...

var oneDay = (1000 * 60 * 60 * 24);
var hAxisTicks = [];
var dateRange = data.getColumnRange(0);
for (var i = dateRange.min.getTime(); i <= dateRange.max.getTime(); i = i + oneDay) {
  hAxisTicks.push(new Date(i));
}

hAxis: {
  format: 'MMM dd',
  ticks: hAxisTicks
}

推荐阅读