Ordenamento por Data no DataTables

Logo do DataTables plugin jQuery

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 ):

4 ideias sobre “Ordenamento por Data no DataTables

  1. Júlio César

    Achei essa forma mais simples:

    jQuery.extend( jQuery.fn.dataTableExt.oSort, {
    "longdate-pre": function ( a ) {
    if (a == '') {
    return 0;
    }
    var ukDatea = a.split('/');
    return (ukDatea[2] + ukDatea[1] + ukDatea[0]) * 1;
    },

    "longdate-asc": function ( a, b ) {
    return ((a < b) ? -1 : ((a > b) ? 1 : 0));
    },

    "longdate-desc": function ( a, b ) {
    return ((a < b) ? 1 : ((a > b) ? -1 : 0));
    },
    });

    Responder
  2. Bruno Fernandes

    Massa! Seguindo a lógica de vocês, eu precisei fazer para ordenar data com hora no formato "dd/MM/yyyy HH:mm:ss". Peguei o código de vocês, modifiquei e ficou assim:

    /* Para ordenar data hora formado dd/MM/yyyy HH:mm:ss */
    $.extend( $.fn.dataTableExt.oSort, {
    "longdatetime-pre": function ( a ) {
    if (a == '') {
    return 0;
    }
    var ukDatea1 = a.substring(0,2);
    var ukDatea2 = a.substring(3,5);
    var ukDatea3 = a.substring(6,10);
    var ukDatea4 = a.substring(11,13);
    var ukDatea5 = a.substring(14,16);
    var ukDatea6 = a.substring(17,19);

    return (ukDatea3 + ukDatea2 + ukDatea1 + ukDatea4 + ukDatea5 + ukDatea6) * 1;
    },

    "longdatetime-asc": function ( a, b ) {
    return ((a < b) ? -1 : ((a > b) ? 1 : 0));
    },

    "longdatetime-desc": function ( a, b ) {
    return ((a < b) ? 1 : ((a > b) ? -1 : 0));
    },
    });

    Responder

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *