1

我正在使用谷歌图表来显示谷歌电子表格中的一些数据。这是我的一段代码。

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'
    }
});
}

其中一列实际上包含日期,格式为日/月/年,例如 15/10/2013。但是,当我尝试通过单击标题对这个特定列进行排序时,排序是通过将每个日期视为一个字符串来执行的,例如,如果三个日期是 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 电子表格中完成的)?

提前致谢!

4

1 回答 1

2

这是一个将格式为“MM/dd/yyyy”的字符串列转换为日期列的 DataView。

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 */]);

这是您可以使用的 jsfiddle 示例:http: //jsfiddle.net/asgallant/tggnC/

于 2013-10-15T14:53:27.637 回答