Datatable date sorting dd/mm/yyyy issue Datatable date sorting dd/mm/yyyy issue jquery jquery

Datatable date sorting dd/mm/yyyy issue


Update 2020: HTML Solution

Since HTML 5 is so much developed and almost all major browser supporting it. So now a much cleaner approach is to use HTML5 data attributes (maxx777 provided a PHP solution I am using the simple HTML). For non-numeric data as in our scenario, we can use data-sort or data-order attribute and assign a sortable value to it.

HTML

<td data-sort='YYYYMMDD'>DD/MM/YYYY</td>

Here is working HTML solution

jQuery Solution

Here is working jQuery solution.

jQuery.extend( jQuery.fn.dataTableExt.oSort, {"date-uk-pre": function ( a ) {    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));}} ); 

Add the above code to script and set the specific column with Date values with { "sType": "date-uk" } and others as null, see below:

$(document).ready(function() {    $('#example').dataTable( {        "aoColumns": [            null,            null,            null,            null,            { "sType": "date-uk" },            null        ]    });    });


Date Sort - with a hidden element

Convert the date to the format YYYYMMDD and prepend to the actual value (DD/MM/YYYY) in the <td>, wrap it in an element, set style display:none; to the elements. Now the date sort will work as a normal sort. The same can be applied to date-time sort.

HTML

<table id="data-table">   <tr>     <td><span>YYYYMMDD</span>DD/MM/YYYY</td>   </tr></table>

CSS

#data-table span {    display:none; }


I know this is an old question and answers are old too. Recently I came across a simple and clean way of sorting dates. It can be done by HTML5 data-order attribute to <td> element.

Here's what I have done in my PHP:

<?php$newdate = date('d M Y', $myDateTime); // Format in which I want to display$dateOrder = date('Y-m-d', $myDateTime); // Sort Order?><td data-order="<?php echo $dateOrder; ?>" ><?php echo $newdate; ?></td>