前言-我的抱怨
没错,依旧是这个美好的下着小雨可以睡懒觉的周六!
之前项目中写的dataTable列表要求按照创建日期进行排序,but虽然现在可以进行创建日期排序了,是在js中使用下面的代码配置的。
//5是时间字段所在的列号-1
"aaSorting": [[5, "desc" ]]
但是!最离谱的就是,这个只能对日期进行排序,乍一听没问题啊。问题在于,这个不能精确到时间啊,也就是说我按照天来可以对列表中的数据进行倒序排序,但是在一天内创建的数据他不能排序啊,听听听听,这多多少少有点气人的感觉了。
正文:对datatable进行按照日期排序-精确到时间
思路一:因为创建时间在显示的时候也是只有日期(数据库里明明都精确到秒了),所以我先去看一下从数据库中读到的数据的创建日期的格式(看看有没有时间)。
瞅瞅瞅瞅,我们明明都精确到毫秒了!
实在是不知道为什么,数据传到js中就自动变成年月日了,啊啊啊啊啊啊啊啊啊啊!烦人
思路二:对传到前台的list进行排序
我一个对js知识非常浅薄的人,竟然来了之后一直写js!啊啊啊啊
希望后端代码就能搞定这个问题,实在是不想弄了,明明今天是周末啊!!!
通过代码排序之后,依旧不合适
思路三:困难总比办法多
最巧合的是,我的数据库中有一个status字段没有用上,所以刚刚好在这里用上了!太开心了
首先在后台页面将list进行排序后遍历这个list,再给这个status依次按照顺序赋值,这样就是将按照时间对status进行排序。这样设置下来,时间在前面的i值就小。
public List<AuditPunishBean> getAuditPunishList() {
List<AuditPunishBean> auditPunishBeans=auditPunishDao.getAuditPunishList();
Collections.sort(auditPunishBeans, new Comparator<AuditPunishBean>() {
@Override
//定义一个比较器
public int compare(AuditPunishBean o1, AuditPunishBean o2) {
Date dt1 = o1.getCreateTime();
Date dt2 = o2.getCreateTime();
int i = dt1.compareTo(dt2);
return i;
}
});
int i=1;
for (AuditPunishBean auditPunishBean : auditPunishBeans) {
auditPunishBean.setStatus(i+"");
i++;
}
return auditPunishBeans;
}
再根据status对dataTable的列表进行排序,将status设置成不可见但可排序。这样根据该列进行降序排序就可以实现创建日期的降序排序了。
"aaSorting": [[6, "desc" ]],
"aoColumns" : [
{"sName":"id", "mData" : "id", "bSearchable": false, "bSortable" : false, "bVisible": true},
{"sName":"punishfileNameAndOA", "mData" : "punishfileNameAndOA"},
{"sName":"accountabilityType", "mData" : "accountabilityType"},
{"sName":"problemAgency", "mData" : "problemAgency"},
{"sName":"punishFileSendTime", "mData" : "punishFileSendTime"},
{"sName":"createTime", "mData" : "createTime"},
{"sName":"status", "mData" : "status","bVisible": false,"bSortable": true},
{"sName":"id", "mData" : "id","bVisible": true, "bSortable" : false, "bSearchable": false}
],
"oTableTools" : { "aButtons": [] }
啊,终于好了,虽然逻辑一塌糊涂,但是实现功能万岁~\(≧▽≦)/~
问题结束!
完结撒花!*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。