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>