2013-10-14 4 views
1

Я использую диаграмму Google для отображения некоторых данных из электронной таблицы Google. Это сегмент моего кода.Сортировка столбцов типа даты при использовании класса Chartwrapper

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)?

Заранее благодарен!

+1

На догадке, ваша «дата» на самом деле являются строки, а не объекты Даты. Проверьте содержимое столбца даты, чтобы убедиться, что это так, например: добавьте строку 'console.dir (data.getValue (0, <индекс столбца столбца>));', откройте страницу в Firefox или Chrome и просмотрите консоль разработчика, чтобы узнать, что выводится. Если это строка типа «01/02/1999», вам необходимо преобразовать строки в объекты Date. – asgallant

+0

Это то, что я подозревал, но спасибо за подсказку о том, как его проверить. Таким образом, даты формы 1/1/1997 рассматриваются как строки. Поскольку я импортировал таблицу как отдельный объект, как мне изменить «тип» одного столбца? – Louis

+0

Вам нужно будет использовать DataView для преобразования строк в Dates. Я отправлю ответ с подробностями. – asgallant

ответ

2

Вот DataView, который преобразует строковый столбец в формате «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 */]); 

Вот jsfiddle примера вы можете играть с: http://jsfiddle.net/asgallant/tggnC/

+0

Спасибо, это именно то, что мне нужно! – Louis

Смежные вопросы