如何在appcelerator中按日期对一组数据进行排序

How to sort a set of data by date in appcelerator

有谁知道如何在appcelerator中整理一组数据?我尝试了一些示例代码,效果很好。但是在我的场景中实施时它不起作用。在我的例子中,我将数据添加到数据库中,并通过从数据库中调用数据对其进行排序。日期格式是这样的 "yyyy-mm-dd hh:mm:ss"

这是我的代码:

var DummyData = [];
var isDatess=true;

var sampleData= Alloy.createCollection('samplePage');
sampleData .fetch({query:"SELECT * FROM dummyValfromDB"});
if(sampleData.length > 0){
        isDatess=true;
        for (var i = 0; i < sampleData.length;i++) {
        var did = sampleData.at(i).get('did');
        var dummyName = sampleData.at(i).get('dummyName');
        var dummydate= sampleData.at(i).get('dummydate');
        var dummyuid= sampleData.at(i).get('dummyuid');

        sampleData.push({
             "label_dummy_name": { text: dummyName},
             "label_dummydate":{text: dummydate},
             "label_dummyuid":{text: dummyuid},      
        });
    }
        DummyData.sort(sorting);
}

  function sorting(a,b){  
    var dateA = new Date(a.label_dummydate).getTime();
    var dateB = new Date(b.label_dummydate).getTime();
    var result="";
    if(isDatess)
        result=dateA > dateB ? 1 : -1;  
    else
        result=dateA < dateB ? 1 : -1;
    return result;  

  }; 


$.dummyList.sections[0].setItems(DummyData);

这只是快速浏览,但看起来您在排序函数的日期构造函数中使用了 a.label_dummydate,而您应该使用 a.label_dummydate.text。您使用的是一个对象文字,而不是您想要的字符串内容,因此它生成了一个无法正确比较的无效日期

可以使用 Underscorejs 库完成排序,该库内置于 Alloy。

您可以根据自己的情况使用 _.sortBy()usage

参考这个

还有这个post专门讨论了使用下划线sortBy对日期进行排序。 Array with object sorting with Underscore sortBy

Alloy 内置了 moment.js,在我看来它比 Date 更容易(使用和阅读代码),它还提供了很多实用程序来比较两个日期;如果你对国际化感兴趣,也很容易做到。

对于您的用例,您能否在 SQL 查询中使用 ORDER BY 按日期或日期时间对数据进行升序或降序排序?

我得到了答案。 NaN 在执行时显示,并通过添加文本解决。在下面找到我得到的答案。

  function sorting(a,b) {  
            var valA = a.label_dummydate.text;
            var valB = b.label_dummydate.text;

            var dateA = new Date(val_a).getTime();
            var dateB = new Date(val_b).getTime();
            var result="";

            if(isDatess)
                result=dateA > dateB ? 1 : -1;  
            else
                result=dateA < dateB ? 1 : -1;  
            return result;  
      }; 

感谢您的帮助。我认为它可能对某些人有所帮助....干杯!!!!