Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WebSQL/SQLite按javascript日期obj排序_Javascript_Jquery_Cordova_Jquery Mobile - Fatal编程技术网

WebSQL/SQLite按javascript日期obj排序

WebSQL/SQLite按javascript日期obj排序,javascript,jquery,cordova,jquery-mobile,Javascript,Jquery,Cordova,Jquery Mobile,我正在开发一个html5/jqm/phonegap应用程序。我正在从客户端db表中选择记录列表。我想按日期对它们进行分组和排序,但表中存在的日期是一个JS date对象,如: 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) S

我正在开发一个html5/jqm/phonegap应用程序。我正在从客户端db表中选择记录列表。我想按日期对它们进行分组和排序,但表中存在的日期是一个JS date对象,如:

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)
作为select的一部分,是否可以在sql中执行此操作?或者如果没有,有人能告诉我如何在Js/jQuery中做到这一点吗

提前谢谢

**编辑以回答皮特的问题**

我使用的是Jaascript/html5客户端版本的SQL,我相信它是基于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);
    }

这有帮助吗?

更新

SQLLite不支持
DATEPART
,但它支持
strftime
。尝试将以下内容添加为您的
订购人

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
        }
    }
};
就JavaScript/jQuery而言:

var d = new Date('Tue Nov 20 2012 16:20:55 GMT+0000 (GMT)');
将返回一个JavaScript中的日期对象,然后可以对其进行排序。仅就日期而言:

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

如果您能更具体地回答问题(您使用的是哪种SQL引擎/版本,或者您的客户端表是如何构造的,以及您用于排序的函数),那么我们可能会为您提供更好的帮助。

您好,感谢您的回复-我已根据您要求的详细信息(或尽我所能)对问题进行了编辑。这有用吗?
d.getDate(); //returns day of month