Пользовательский метод сортировки можно добавить с помощью Jquery Extend и fn.dataTableExt.oSort следующим образом:
$(document).ready(function() {
function convertDate(d) {
var p = d.split(/\D/g)
return [p[2],p[1],p[0] ].join("/")
}
let json = [
{
"item": "Someitem",
"Price": 120,
"Status": "Free",
"date": "2019-11-01"
},
{
"item": "SecondItem",
"Price": 90,
"Status": "Taken",
"date": "2019-10-01"
},
{
"item": "ThirdItem",
"Price": 90,
"Status": "Taken",
"date": "2019-10-15"
}
];
var columnDefs = [
{
data: "item"
},
{
data: "Price"
},
{
data: "Status"
},
{
data: "date"
}
];
var myTable;
json.forEach((item)=>{
item.date = convertDate(item.date);
})
myTable = $('#example').DataTable({
"sPaginationType": "full_numbers",
data: json,
columns: columnDefs,
responsive: false,
columnDefs: [
{"className": "dt-center", "targets": "_all"},
{
"targets": [ 3 ],
"visible": true,
"searchable": false,
"sType": "date-ddmmyyyy"
}
]
});
jQuery.extend( jQuery.fn.dataTableExt.oSort, {
"date-ddmmyyyy-pre": function ( a ) {
var dateFormat = a.split('/');
return (dateFormat[2] + dateFormat[1] + dateFormat[0]) * 1;
},
"date-ddmmyyyy-asc": function ( a, b ) {
return ((a < b) ? -1 : ((a > b) ? 1 : 0));
},
"date-ddmmyyyy-desc": function ( a, b ) {
return ((a < b) ? 1 : ((a > b) ? -1 : 0));
}
});
})
table.dataTable tbody>tr.selected,
table.dataTable tbody>tr>.selected {
background-color: #A2D3F6;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link href="https://cdn.datatables.net/1.10.11/css/jquery.dataTables.min.css" rel="stylesheet"/>
<script src="https://cdn.datatables.net/1.10.11/js/jquery.dataTables.min.js"></script>
<div class="container">
<table cellpadding="0" cellspacing="0" border="0" class="dataTable table table-striped" id="example">
<thead>
<th>name</th>
<th>price</th>
<th>status</th>
<th>date</th>
</thead>
</table>
</div>
Для этого вам нужно создать сортировку после инициализации таблицы:
jQuery.extend( jQuery.fn.dataTableExt.oSort, {
"date-ddmmyyyy-pre": function ( a ) {
var dateFormat = a.split('/');
return (dateFormat[2] + dateFormat[1] + dateFormat[0]) * 1;
},
"date-ddmmyyyy-asc": function ( a, b ) {
return ((a < b) ? -1 : ((a > b) ? 1 : 0));
},
"date-ddmmyyyy-desc": function ( a, b ) {
return ((a < b) ? 1 : ((a > b) ? -1 : 0));
}
} );
Также в ваших столбцахDef вам нужнодобавить тип поиска столбца даты:
{
"targets": [ 3 ],
"visible": true,
"searchable": false,
"sType": "date-ddmmyyyy"//<--- this one
}
Надеюсь, это поможет