2012-11-18 73 views
1

我正在處理html5/jqm/phonegap應用程序。我從客戶端數據庫表中選擇記錄列表。我想組和日期,但存在於表之日起責令其是JS日期對象,如:WebSQL/SQLite order by javascript date obj

Mon Nov 19 2012 16:20:55 GMT+0000 (GMT) 

我想團和由數字天階它們(18,19,20在此例)。所以,以下細節:

Sun Nov 18 2012 16:20:55 GMT+0000 (GMT) 
Mon Nov 19 2012 16:20:55 GMT+0000 (GMT) 
Sun Nov 18 2012 16:20:55 GMT+0000 (GMT) 
Tue Nov 12 2012 16:20:55 GMT+0000 (GMT) 

會在這個順序返回:

Tue Nov 20 2012 16:20:55 GMT+0000 (GMT) 
Mon Nov 19 2012 16:20:55 GMT+0000 (GMT) 
Sun Nov 18 2012 16:20:55 GMT+0000 (GMT) 
Sun Nov 18 2012 16:20:55 GMT+0000 (GMT) 

是否有可能做到這一點在SQL作爲選擇的一部分嗎?或者,如果沒有人可以讓我在正確的方向上如何在Js/jQuery中做到這一點?

在此先感謝

**編輯迴應**

我使用SQL的Jaascript/HTML5客戶端版本,我相信這是基於SQLite的皮特的問題。要創建DB我打電話以下JS -

var db = openDatabase(shortName, version, displayName, maxSize); 

我的數據庫架構是:

transaction.executeSql('CREATE TABLE RECORDINGS (id INTEGER PRIMARY KEY AUTOINCREMENT, caseRef, startDate, endDate, caseTypeId, actionTypeId, notes, userId, syncStatus);'); 
transaction.executeSql('INSERT INTO RECORDINGS (caseRef, startDate, endDate, caseTypeId, actionTypeId, notes, userId, syncStatus) VALUES ("CR1234", "'+startDate+'", "'+endDate+'", 1, 2, "Meeting about something", 1, 0);'); 

我選擇目前的樣子:

function getRecordingsQuery(transaction) { 
     transaction.executeSql('SELECT RECORDINGS.id, RECORDINGS.caseRef, RECORDINGS.startDate, RECORDINGS.endDate, RECORDINGS.notes, RECORDINGS.syncStatus, CASETYPES.description FROM RECORDINGS, CASETYPES WHERE RECORDINGS.caseTypeId = CASETYPES.id AND RECORDINGS.userId =? ORDER BY startDate DESC', [window.currentSignedInUserId], getRecordingsDataHandler, errorHandler); 
    } 

這是否幫助?

回答

0

UPDATE

SQLLite不支持DATEPART,但它支持strftime。試着增加以下內容作爲ORDER BY

ORDER BY CAST(strftime("%d", date) AS INTEGER) DESC 

您可以改爲處理JavaScript中的排序。我敢肯定有更好的,更有效的方法可以做到這一點,但你可以只使用內置的排序爲數組,像這樣:

var getRecordingsDataHandler = function getRecordingsDataHandler(tx, results) { 
    var rows = [], 
     row = null, 
     i = 0; 
     if (results.rows && results.rows.length) { 
     for (i = 0; i < results.rows.length; i += 1) { 
      rows.push({ 
       "startDate": new Date(results.rows.item(i).startDate), 
       "data": results.rows.item(i) 
      }); 
     } 
     rows.sort(function (a, b) { 
      var ascending = a.startDate.getDate() - b.startDate.getDate(), 
       descending = b.startDate.getDate() - a.startDate.getDate(); 
      return descending; 
     }); 
     for (i = 0; i < rows.length; i += 1) { 
      row = rows[i].data; 
      //process the rest 
      //since row === results.rows.item(i), reference from row 
     } 
    } 
}; 

ORIGINAL:

不知道什麼SQL你正在使用的版本,很難回答你的問題的這一部分。我想大多數人支持DATEPART功能,所以你可以嘗試:

ORDER BY DATEPART(dd, YourDateField) DESC 

至於使用Javascript/jQuery的:

var d = new Date('Tue Nov 20 2012 16:20:55 GMT+0000 (GMT)'); 

將在JavaScript中,你可以再排序返回的日期對象。對於剛剛日期:

d.getDate(); //returns day of month 

如果你能成爲一個更具體一點在你的問題(該引擎/你使用SQL,或者如何您的客戶端表的結構和您正在使用的版本功能對它進行排序),那麼我們可能會更好地幫助你。

+0

嗨,感謝您的回覆 - 我已經編輯了您所要求的細節(或儘可能多)的問題。這有幫助嗎? –