Sorting 使用Chartwrapper类时日期类型列的排序
我正在使用谷歌图表显示谷歌电子表格中的一些数据。这是我代码的一部分Sorting 使用Chartwrapper类时日期类型列的排序,sorting,google-visualization,Sorting,Google Visualization,我正在使用谷歌图表显示谷歌电子表格中的一些数据。这是我代码的一部分 var queryurl = <link to the Google spreadsheet>; function drawVisualization() { var query = new google.visualization.Query(queryurl); // Send the query with a callback function. query.send(handleQ
var queryurl = <link to the Google spreadsheet>;
function drawVisualization() {
var query = new google.visualization.Query(queryurl);
// Send the query with a callback function.
query.send(handleQueryResponse);
}
function handleQueryResponse(response) {
// Prepare the data
var data = response.getDataTable();
var table = new google.visualization.ChartWrapper({
'chartType': 'Table',
'containerId': 'chart2',
'options': {
'showRowNumber': 'true'
}
});
}
var queryurl=;
函数drawVisualization(){
var query=newgoogle.visualization.query(queryurl);
//使用回调函数发送查询。
发送(handleQueryResponse);
}
函数handleQueryResponse(响应){
//准备数据
var data=response.getDataTable();
var table=new google.visualization.ChartWrapper({
“图表类型”:“表格”,
“集装箱运输”:“图表2”,
“选项”:{
'showRowNumber':'true'
}
});
}
其中一列实际上包含日期,格式为日/月/年,例如2013年10月15日。但是,当我试图通过单击标题对该特定列进行排序时,排序是通过将每个日期视为字符串来执行的,例如,如果其中三个日期是01/02/1999、01/03/1999和01/09/1997,则排序顺序(升序)是01/02/1999、01/03/1999和01/09/1997,而不是正确的01/09/1997, 01/02/1999, 01/03/1999.
我的问题是:有没有办法确保在日期上下文中的排序是正确的?例如,我是否需要指定每列中包含的数据类型(这当然是在原始Google电子表格中完成的)
提前谢谢 这是一个数据视图,它将格式为“MM/dd/yyyy”的字符串列转换为日期列
var dateFormatter = new google.visualization.DateFormat({pattern: 'MM/dd/yyyy'});
var view = new google.visualization.DataView(data);
view.setColumns([/* list of column indices that preceed the date column */ {
type: 'date',
label: data.getColumnLabel(dateColumnIndex),
calc: function (dt, row) {
var dateArr = dt.getValue(row, dateColumnIndex).split('/');
var year = parseInt(dateArr[2]);
var month = parseInt(dateArr[0]) - 1; // adjust month to javascript's 0-indexed months
var day = parseInt(dateArr[1]);
var date = new Date(year, month, day);
return {
v: date,
f: dateFormatter.formatValue(date)
};
}
} /* list of column indices that follow the date column */]);
下面是一个可以使用的JSFIDLE示例:猜测一下,您的“日期”实际上是字符串,而不是日期对象。检查date列的内容以查看是否是这种情况,例如:添加行
console.dir(data.getValue(0,)
,在Firefox或Chrome中打开页面,然后查看开发人员控制台以查看输出内容。如果它是一个类似“01/02/1999”的字符串,那么您需要将字符串转换为日期对象。这也是我所怀疑的,但感谢您提供了有关如何验证它的提示。因此,表1/1/1997的日期被视为字符串。由于我将表作为单个对象导入,如何更改单个列的“类型”?必须使用DataView将字符串转换为日期。我会发布一个详细的答案。谢谢,这正是我需要的!