jquery 数据表日期排序问题
jquery datatable date sorting issue
我正在使用 datatable plugin 版本 1.8.2 在我的网页上显示 table。
它工作正常,除了。 它没有正确排序日期,它在日期对象 中显示 "invalid date"。下面是我的代码片段。
$(document).ready(function() {
jQuery.fn.dataTableExt.oSort['usdate-asc'] = function(a,b) {
/*
a and b are <div> tag with date
*/
var texta = ($(a).text()).toString(); // Here I am able to see my date in ' 03-17-2015 12:25:21 AM ' format
var textb = ($(b).text()).toString();// Here I am able to see my date in ' 03-17-2015 12:25:21 AM ' format
var usDatea = new Date(Date.parse(texta)); // Here it is showing "invalid date"
var usDateb = new Date(Date.parse(textb));
return ((usDatea < usDateb) ? -1 : ((usDatea > usDateb) ? 1 : 0));
};
jQuery.fn.dataTableExt.oSort['usdate-desc'] = function(a,b) {
/*
a and b are <div> tag with date
*/
var texta = ($(a).text()).toString(); //same as above
var textb = ($(b).text()).toString(); //same as above
var usDatea = new Date(Date.parse(texta)); //same as above
var usDateb = new Date(Date.parse(textb)); //same as above
return ((usDatea < usDateb) ? 1 : ((usDatea > usDateb) ? -1 : 0));
};
$('#tablegridname').dataTable( {
"sPaginationType": 'full_numbers',
"bJQueryUI": true,
"iDisplayLength": 50,
"aLengthMenu":[50,100,500,1000],
"aaSorting": [[ 4, 'desc' ]],
"aoColumns": [null, null, null, null, {"sType": "usdate"}]
} );
});
});
试试这个 fiddle:
它使用这个简单的函数:
function parseDateForSort(d)
{
return d.substring(6,10) + d.substring(0,2) +
d.substring(3,5) + d.substring(20) +
d.substring(11,19);
}
该函数利用了一个事实,幸运的是,PM 按字母顺序排在 AM 之后;因此 "d.substring(20)" 在字符串中间。所以我们有 YYYYMMDD[上午或下午]HH:MM:SS。
在您的代码中,您可以去掉 Date.parse,并将 return 替换为:
usDatea = parseDateForSort(texta);
usDateb = parseDateForSort(textb);
return ((usDatea < usDateb) ? -1 : ((usDatea > usDateb) ? 1 : 0));
祝你好运。
附录:
您可以创建自己的排序类型,然后指定列:
$.extend($.fn.dataTableExt.oSort, {
"date-us-pre": function (v) {
return parseDateForSort(v);
},
"date-us-asc": function ( a, b ) { return a - b; },
"date-us-desc": function ( a, b ) { return b - a; }
} );
然后在您的 .dataTable 调用中包括
"aoColumnDefs": [ { "sType":"date-us", "aTargets":[6] } ]
或任何列号,而不是 6。
我正在使用 datatable plugin 版本 1.8.2 在我的网页上显示 table。
它工作正常,除了。 它没有正确排序日期,它在日期对象 中显示 "invalid date"。下面是我的代码片段。
$(document).ready(function() {
jQuery.fn.dataTableExt.oSort['usdate-asc'] = function(a,b) {
/*
a and b are <div> tag with date
*/
var texta = ($(a).text()).toString(); // Here I am able to see my date in ' 03-17-2015 12:25:21 AM ' format
var textb = ($(b).text()).toString();// Here I am able to see my date in ' 03-17-2015 12:25:21 AM ' format
var usDatea = new Date(Date.parse(texta)); // Here it is showing "invalid date"
var usDateb = new Date(Date.parse(textb));
return ((usDatea < usDateb) ? -1 : ((usDatea > usDateb) ? 1 : 0));
};
jQuery.fn.dataTableExt.oSort['usdate-desc'] = function(a,b) {
/*
a and b are <div> tag with date
*/
var texta = ($(a).text()).toString(); //same as above
var textb = ($(b).text()).toString(); //same as above
var usDatea = new Date(Date.parse(texta)); //same as above
var usDateb = new Date(Date.parse(textb)); //same as above
return ((usDatea < usDateb) ? 1 : ((usDatea > usDateb) ? -1 : 0));
};
$('#tablegridname').dataTable( {
"sPaginationType": 'full_numbers',
"bJQueryUI": true,
"iDisplayLength": 50,
"aLengthMenu":[50,100,500,1000],
"aaSorting": [[ 4, 'desc' ]],
"aoColumns": [null, null, null, null, {"sType": "usdate"}]
} );
});
});
试试这个 fiddle:
它使用这个简单的函数:
function parseDateForSort(d)
{
return d.substring(6,10) + d.substring(0,2) +
d.substring(3,5) + d.substring(20) +
d.substring(11,19);
}
该函数利用了一个事实,幸运的是,PM 按字母顺序排在 AM 之后;因此 "d.substring(20)" 在字符串中间。所以我们有 YYYYMMDD[上午或下午]HH:MM:SS。
在您的代码中,您可以去掉 Date.parse,并将 return 替换为:
usDatea = parseDateForSort(texta);
usDateb = parseDateForSort(textb);
return ((usDatea < usDateb) ? -1 : ((usDatea > usDateb) ? 1 : 0));
祝你好运。
附录:
您可以创建自己的排序类型,然后指定列:
$.extend($.fn.dataTableExt.oSort, {
"date-us-pre": function (v) {
return parseDateForSort(v);
},
"date-us-asc": function ( a, b ) { return a - b; },
"date-us-desc": function ( a, b ) { return b - a; }
} );
然后在您的 .dataTable 调用中包括
"aoColumnDefs": [ { "sType":"date-us", "aTargets":[6] } ]
或任何列号,而不是 6。