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将字符串转换为日期。我会发布一个详细的答案。谢谢,这正是我需要的!