2013-10-14 21 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

這就是我所懷疑的,但是要感謝關於如何驗證它的提示。所以它是1997年1月1日形式的日期被視爲字符串。由於我將表格作爲單個對象導入,因此如何更改單個列的「類型」? – Louis

+0

您必須使用DataView將字符串轉換爲日期。我會用細節發佈一個答案。 – 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

相關問題