数据表排序不适用于 dd-mm-yyyy 格式
Datatable sorting is not working for dd-mm-yyyy format
我想对数据表中的日期进行排序。我希望它以这种格式执行 D-M-Y
,但它不起作用。
当我将格式更改为 Y-M-D
时,它起作用了。但我需要这种格式 D-M-Y
.
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$('#est').dataTable({
"bProcessing": true,
"bServerSide": true,
"sAjaxSource": '<?php echo base_url(); ?>index.php/welcome/tendersdatatable',
"aaSorting": [
[3, "desc"]
],
"bJQueryUI": true,
"sPaginationType": "bootstrap",
"iDisplayStart ": 20,
"oLanguage": {},
"fnInitComplete": function () {
//oTable.fnAdjustColumnSizing();
},
'fnServerData': function (sSource, aoData, fnCallback) {
$.ajax({
'dataType': 'json',
'type': 'POST',
'url': sSource,
'data': aoData,
'success': fnCallback
});
}
});
$('.dataTables_filter input').addClass('form-control').attr('placeholder', 'Search...').css('margin-right', "4%");
$('.dataTables_length select').addClass('form-control');
});
</script>
有一个用于日期时间排序的插件。 Source。它确实有 moment.js 作为依赖项。
$.fn.dataTable.moment( 'D-M-Y');
有sorting plug-ins available, however none of them except datetime-moment支持你需要的格式。但是 datetime-moment
插件与 moment.js.
有依赖关系
但是可以通过在初始化数据之前定义自定义排序方法 date-dmy
来完成 table。
jQuery.extend( jQuery.fn.dataTableExt.oSort, {
"date-dmy-pre": function ( a ) {
if (a == null || a == "") {
return 0;
}
var date = a.split('-');
return (date[2] + date[1] + date[0]) * 1;
},
"date-dmy-asc": function ( a, b ) {
return ((a < b) ? -1 : ((a > b) ? 1 : 0));
},
"date-dmy-desc": function ( a, b ) {
return ((a < b) ? 1 : ((a > b) ? -1 : 0));
}
} );
要使用此自定义类型,您需要使用 aoColumnDefs
来设置所需的列类型,如下所示。我正在使用索引 0
来设置第一列的类型。为简单起见,省略了其他初始化选项。
$('#example').dataTable( {
"aoColumnDefs": [
{ "sType": "date-dmy", "aTargets": [ 0 ] }
]
} );
如果有人需要,这个对我有用。
https://datatables.net/forums/discussion/2467/need-help-for-sorting-date-with-dd-mm-yyyy-format
这对我有用
jQuery.fn.dataTableExt.aTypes.unshift(
function (sData) {
if (sData !== null && sData.match(/^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[012])\/(19|20|21)\d\d$/)) {
return 'date-uk';
}
return null;
}
);
jQuery.extend(jQuery.fn.dataTableExt.oSort, {
"date-uk-pre": function (a) {
if (a == null || a == "") {
return 0;
}
var ukDatea = a.split('/');
return (ukDatea[2] + ukDatea[1] + ukDatea[0]) * 1;
},
"date-uk-asc": function (a, b) {
return ((a < b) ? -1 : ((a > b) ? 1 : 0));
},
"date-uk-desc": function (a, b) {
return ((a < b) ? 1 : ((a > b) ? -1 : 0));
}
});
您不需要插件。您可以通过添加隐藏元素对其进行排序。
将日期转换为 YYYYMMDD 格式并添加到实际值 (DD/MM/YYYY) 中,将其包装在一个元素中,设置样式 display:none;到元素。现在日期排序将像正常排序一样工作。同样可以应用于 date-time 排序。
HTML
<table id="data-table">
<tr>
<td><span>YYYYMMDD</span>DD/MM/YYYY</td>
</tr>
</table>
如果你像我一样使用 rails sintaxys 将是这样的:
<td>
<span>
<%= youmodel.created_at.strftime("%Y%m%d") %>
</span>
<%= youmodel.created_at.strftime("%d/%m/%Y") %>
</td>
CSS
#data-table span {
display:none;
}
我想对数据表中的日期进行排序。我希望它以这种格式执行 D-M-Y
,但它不起作用。
当我将格式更改为 Y-M-D
时,它起作用了。但我需要这种格式 D-M-Y
.
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$('#est').dataTable({
"bProcessing": true,
"bServerSide": true,
"sAjaxSource": '<?php echo base_url(); ?>index.php/welcome/tendersdatatable',
"aaSorting": [
[3, "desc"]
],
"bJQueryUI": true,
"sPaginationType": "bootstrap",
"iDisplayStart ": 20,
"oLanguage": {},
"fnInitComplete": function () {
//oTable.fnAdjustColumnSizing();
},
'fnServerData': function (sSource, aoData, fnCallback) {
$.ajax({
'dataType': 'json',
'type': 'POST',
'url': sSource,
'data': aoData,
'success': fnCallback
});
}
});
$('.dataTables_filter input').addClass('form-control').attr('placeholder', 'Search...').css('margin-right', "4%");
$('.dataTables_length select').addClass('form-control');
});
</script>
有一个用于日期时间排序的插件。 Source。它确实有 moment.js 作为依赖项。
$.fn.dataTable.moment( 'D-M-Y');
有sorting plug-ins available, however none of them except datetime-moment支持你需要的格式。但是 datetime-moment
插件与 moment.js.
但是可以通过在初始化数据之前定义自定义排序方法 date-dmy
来完成 table。
jQuery.extend( jQuery.fn.dataTableExt.oSort, {
"date-dmy-pre": function ( a ) {
if (a == null || a == "") {
return 0;
}
var date = a.split('-');
return (date[2] + date[1] + date[0]) * 1;
},
"date-dmy-asc": function ( a, b ) {
return ((a < b) ? -1 : ((a > b) ? 1 : 0));
},
"date-dmy-desc": function ( a, b ) {
return ((a < b) ? 1 : ((a > b) ? -1 : 0));
}
} );
要使用此自定义类型,您需要使用 aoColumnDefs
来设置所需的列类型,如下所示。我正在使用索引 0
来设置第一列的类型。为简单起见,省略了其他初始化选项。
$('#example').dataTable( {
"aoColumnDefs": [
{ "sType": "date-dmy", "aTargets": [ 0 ] }
]
} );
如果有人需要,这个对我有用。 https://datatables.net/forums/discussion/2467/need-help-for-sorting-date-with-dd-mm-yyyy-format
这对我有用
jQuery.fn.dataTableExt.aTypes.unshift(
function (sData) {
if (sData !== null && sData.match(/^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[012])\/(19|20|21)\d\d$/)) {
return 'date-uk';
}
return null;
}
);
jQuery.extend(jQuery.fn.dataTableExt.oSort, {
"date-uk-pre": function (a) {
if (a == null || a == "") {
return 0;
}
var ukDatea = a.split('/');
return (ukDatea[2] + ukDatea[1] + ukDatea[0]) * 1;
},
"date-uk-asc": function (a, b) {
return ((a < b) ? -1 : ((a > b) ? 1 : 0));
},
"date-uk-desc": function (a, b) {
return ((a < b) ? 1 : ((a > b) ? -1 : 0));
}
});
您不需要插件。您可以通过添加隐藏元素对其进行排序。
将日期转换为 YYYYMMDD 格式并添加到实际值 (DD/MM/YYYY) 中,将其包装在一个元素中,设置样式 display:none;到元素。现在日期排序将像正常排序一样工作。同样可以应用于 date-time 排序。
HTML
<table id="data-table">
<tr>
<td><span>YYYYMMDD</span>DD/MM/YYYY</td>
</tr>
</table>
如果你像我一样使用 rails sintaxys 将是这样的:
<td>
<span>
<%= youmodel.created_at.strftime("%Y%m%d") %>
</span>
<%= youmodel.created_at.strftime("%d/%m/%Y") %>
</td>
CSS
#data-table span {
display:none;
}