O DataTables é hoje uma dos plugin jQuery mas utilizado por resolver ordenamento e paginação de forma automática. Mas em qualquer ferramenta que tente fazer ordenamento sem reflection, ocorre um problema que é a identificação automática do tipo de dados da coluna ou lista ordenada.
Isto ser torna um problema no seguinte caso:
- 01/02/2015
- 02/01/2015
- 03/12/2014
Na lista acima as datas estão ordenadas como "string".
Por padrão, o plugin do dataTables reconhece automáticamente os tipos "string", "numeric", e, "date" , mas todos em formato americano.
Para burlar este problema, é possível criar um tipo de dado extendendo a api do jQuery (Clique em Result para ver o resultado ):
<div class="container"> <table cellpadding="0" cellspacing="0" border="0" class="dataTable" id="example"> <thead> <tr> <th>Data</th> <th>Browser</th> <th>Platform(s)</th> <th>Engine version</th> <th>CSS grade</th> </tr> </thead> <tbody> <tr> <td>05/02/2010</td> <td>Internet Explorer 4.0</td> <td>Win 95+</td> <td>11</td> <td>X</td> </tr> <tr> <td>15/01/2010</td> <td>Internet Explorer 4.0</td> <td>Win 95+</td> <td>21</td> <td>X</td> </tr> <tr> <td>22/01/2010</td> <td>Internet Explorer 4.0</td> <td>Win 95+</td> <td>-4</td> <td>X</td> </tr> <tr> <td>10/06/2013</td> <td>Internet Explorer 4.0</td> <td>Win 95+</td> <td>4</td> <td>X</td> </tr> <tr> <td>25/12/2010</td> <td>Internet Explorer 4.0</td> <td>Win 95+</td> <td>4</td> <td>X</td> </tr> <tr> <td>05/01/2010</td> <td>Internet Explorer 4.0</td> <td>Win 95+</td> <td>4</td> <td>X</td> </tr> </tbody> </table> </div>
$(document).ready(function () { $.extend(jQuery.fn.dataTableExt.oSort, { "date-pt-pre": function (a) { var x; try { var dateA = a.trim().split("/"); var day = parseInt(dateA[0], 10); var month = parseInt(dateA[1], 10); var year = parseInt(dateA[2], 10); var date = new Date(year, month - 1, day); console.log("convertendo a data: " + date); x = date.getTime(); } catch (err) { x = new Date().getTime(); } return x; }, "date-pt-asc": function (a, b) { return a - b; }, "date-pt-desc": function (a, b) { return b - a; } }); $('#example').dataTable({ "sPaginationType": "full_numbers", "aoColumns": [{ "sType": "date-pt" }, null, null, { "sType": "numeric" }, null] }); });
Você pode testar o código acima no JsFiddle.