我正在使用Datatable插件。我希望在日期列降序排序,但它不与merender一起使用。我也想使用mRender
格式化日期。对于其他列排序工作正常
请参阅演示:http://jsfiddle.net/wwhy5d2e/
这是js代码:
$table = $('#KiList').dataTable({
bAutoWidth: false,
aoColumns: [{
'sWidth': '35%'
}, {
'sWidth': '20%',
"sType": "datetime-us"
}, {
'sWidth': '25%',
"sType": 'string'
}, {
'sWidth': '10%',
"sType": 'string'
}, {
'sWidth': '10%',
"sType": 'string'
}],
"aoColumnDefs": [{
"aTargets": [1],
"mRender": function(date, type, full) {
return moment(date).format('MM-DD-YYYY hh:mm a');
}
}],
aaSorting: [[1, 'desc']]
});
答案 0 :(得分:0)
我得到了这个工作:Working Demo
参考:https://gist.github.com/mark47/10427687
$table = $('#KiList').dataTable({
bAutoWidth: false,
aoColumns: [{
'sWidth': '35%'
}, {
'sWidth': '20%',
"type": "datetime-us"//changed
}, {
'sWidth': '25%',
"sType": 'string'
}, {
'sWidth': '10%',
"sType": 'string'
}, {
'sWidth': '10%',
"sType": 'string'
}],
"aoColumnDefs": [{
"aTargets": [1],
"mRender": function(date, type, full) {
return moment(date).format('MM-DD-YYYY hh:mm a');
}
}],
aaSorting: [[1, 'desc']]
});
添加了:
jQuery.extend( jQuery.fn.dataTableExt.oSort, {
"datetime-us": function ( a ) {
// If there's no slash, then it's not an actual date, so return zero for sorting
if(a.indexOf('/') === -1) {
return '0';
} else {
// Set optional items to zero
var hour = 0,
min = 0,
ap = 0;
// Execute match. Requires month, day, year. Can be mm/dd or m/d. Can be yy or yyyy
// Time is optional. am/pm is optional
// TODO - remove extra time column from array
var b = a.match(/(\d{1,2})\/(\d{1,2})\/(\d{2,4})( (\d{1,2}):(\d{1,2}))? ?(am|pm|AM|PM|Am|Pm)?/),
month = b[1],
day = b[2],
year = b[3];
// If time exists then output hours and minutes
if (b[4] != undefined) {
hour = b[5];
min = b[6];
}
// if using am/pm then change the hour to 24 hour format for sorting
if (b[7] != undefined) {
ap = b[7];
if(hour == '12') hour = '0';
if(ap == 'pm') hour = parseInt(hour, 10)+12;
}
// for 2 digit years, changes to 20__ if less than 70
if(year.length == 2){
if(parseInt(year, 10) < 70) year = '20'+year;
else year = '19'+year;
}
// Converts single digits
if(month.length == 1) month = '0'+month;
if(day.length == 1) day = '0'+day;
if(hour.length == 1) hour = '0'+hour;
if(min.length == 1) min = '0'+min;
var tt = year+month+day+hour+min;
return tt;
}
},
"datetime-us-asc": function ( a, b ) {
return a - b;
},
"datetime-us-desc": function ( a, b ) {
return b - a;
}
});