如何在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;
};
感谢您的帮助。我认为它可能对某些人有所帮助....干杯!!!!
有谁知道如何在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;
};
感谢您的帮助。我认为它可能对某些人有所帮助....干杯!!!!