如何在javascript中按时间(格式:5:40 PM)排序以用于数据表?
我使用的数据表有5列() 这些列是如何在javascript中按时间(格式:5:40 PM)排序以用于数据表?,javascript,jquery,sorting,time,datatables,Javascript,Jquery,Sorting,Time,Datatables,我使用的数据表有5列() 这些列是 日期格式:1月5日 时间格式为:上午10:31(xx:xx) 第3、4、5列并不重要,它们只是数据,只要1和2是正确的,我就不关心排序 我想先按日期排序(最近的),然后按时间排序(最新的在顶部) 因此,1月5日下午4:58应该在凌晨4:58之前显示,显然所有其他数字也需要在所有其他时间工作。格式始终相同,即:上午12:34、下午4:15、上午12:00等 就日期而言,这已经非常有效了。datatable中只有2天的数据最大值,因此即使它滚动到本月的第一天,它仍
oTable = $('#posts').dataTable({
"bSort": true,
"aaSorting": [ [0,'desc'], [1,'asc'] ],
"aoColumns": [
null,
{ "sType": 'time-sort' },
null,
null,
null
]
});
这里是:
现在,我必须使用“aoColumns”的sType属性为时间构建某种自定义排序算法(您可以在上面的示例链接中看到,他区分大小写进行排序),我不知道如何做到这一点:(我甚至不确定我到目前为止是否做对了。这似乎对两列进行了很好的排序,但现在我需要确保时间合适
这是我认为我需要的代码的另一部分。(再次,这是来自示例)。我99%确定这是我需要为升序和降序输入自定义时间排序代码的地方
/* Define two custom functions (asc and desc) for time sorting */
jQuery.fn.dataTableExt.oSort['time-sort-asc'] = function(x,y) {
return ???;
};
jQuery.fn.dataTableExt.oSort['time-sort-desc'] = function(x,y) {
return ???
};
可以通过将输入字符串中的时间解析为日期对象,然后比较日期对象来完成此操作: 在此进行工作演示: 资料来源:
另请参见此答案:根据前面的示例进行详细说明;即使时间单元格为空,下面的代码片段也将进行排序
function getTimeValue(x) {
// if the cell is not empty then parse it, otherwise just return 0 as the value; so it will be sorted appropriately.
if (x != '') {
var time = x.match(/(\d+)(?::(\d\d))?\s*(P?)/);
var h = parseInt(time[1]) + (time[3] ? 12 : 0);
if(!time[3] && parseInt(time[1])==12) h = 0;
if(time[3] && parseInt(time[1])==12) h = 12;
return h * 60 + ( parseInt(time[2]) || 0 );
} else {
return 0;
}
}
这就是我的工作
jQuery.extend(jQuery.fn.dataTableExt.oSort, {
"time-sort-pre": function(a) {
if (a == '')
return null;
var time = a.match(/(\d+)(:(\d\d))?\s*(p?)/i);
if (time == null)
return null;
var hours = parseInt(time[1], 10);
if (hours == 12 && !time[4]) {
hours = 0;
}
else {
hours += (hours < 12 && time[4]) ? 12 : 0;
}
var d = new Date();
d.setHours(hours);
d.setMinutes(parseInt(time[3], 10) || 0);
d.setSeconds(0, 0);
return d;
},
"time-sort-asc": function(a, b) {
return ((a < b) ? -1 : ((a > b) ? 1 : 0));
},
"time-sort-desc": function(a, b) {
return ((a < b) ? 1 : ((a > b) ? -1 : 0));
}
});
假设您的表中只有一列的时间值很有趣,我将对此进行检查。谢谢!它似乎仍然不起作用:我添加了一些更复杂的时间:为了这个示例,我还删除了多列排序,这样我们就可以完全消除该变量,只关注工作时间,而不是关系我先转到另一列进行排序。-12点问题已解决。-这一列应该可以工作。对前一列进行了大量修改。:)因此“2月28日”在“3月1日”上方,但“3月31日”在“4月1日”下方(即日历顺序颠倒)?最多只有2天的数据,…但它需要显示最新到最旧的数据。因此,4月1日在顶部,然后是3月31日、3月1日、2月28日(如果它显示了那么多数据,也就是说)现在我想起来了,我认为日期可能也需要自定义排序,但这并没有时间那么重要。我很快就能弄清楚。根据降序,月1日以上可能是高于或低于,这是不对的。是的,我认为它会被适当地按日期排序,这是迟钝的。但它只有1天我需要担心的是,时间是最重要的,然后我会计算出日期
$('#datatable-list').dataTable(
aoColumns: [{sType: "time-sort"}]
);