X

DataTables – Ordenar campo data d/m/Y (padrão brasileiro)

DataTables é um plug-in para a biblioteca jQuery. É uma ferramenta altamente flexível, com base nos fundamentos da otimização progressiva, e irá adicionar controles avançadas de interação a qualquer tabela HTML.

Para quem utiliza o DataTables e deseja formatar o um campo data no formato brasileiro (pt-BR) d/m/Y deve ter percebido que somente mostrar os valores nesse padrão a ordenação não funciona corretamente, para resolver esse problema é preciso acrescentar este script.

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

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

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

ao criar sua tabela definir a coluna data:

  columnDefs: [
                 { type: 'date-br', targets: 4 }
        
               ],

para mais informações acesse: https://www.datatables.net/

Juliano Rossetto: Formado em Analise e Desenvolvimento de Sistemas. Desenvolvedor dos principais CMS ( Wordpress, Joomla). Desenvolvedor de E-commerce (Opencart e WooCommerce). Analista de SEO: Otimização de sites para mecanismos de buscas. Analista de Infraestrutura voltado para servidores na nuvem: Amazon Web Services (AWS), DigitalOcean e Linode. Para dúvidas ou serviços entre em contato aqui.

Ver comentários (17)

  • Great Solution!! Congrats! I was looking for this for a long time! Thanks!

  • Olá Juliano!

    Você poderia me dar um super help? ^_^
    Estou com problema na ordenação da data em minha table. Tentei inserir o código do post acima, mas não funciona para o meu caso.
    Veja como fica a ordenação: http://tinypic.com/r/v79ruc/9
    Ele ordena por dia ao invés de ser por data.

    Você conseguiria me ajudar?

    • Olá Amanda,
      da uma olhada como funciona: http://jsfiddle.net/jrossetto/fgj0dsfn/4/

      se a sua coluna data de atualização for a primeira igual a do exemplo que enviei... vc precisa alterar o targets.

      columnDefs: [{
      type: 'date-br',
      targets: 0
      }]

      lembrando que as colunas sempre começam em "0".

      espero ter ajudado.

      att
      Juliano

      • Muito obrigada pela resposta, Juliano. Eu só fui ver que havia sido respondida agora que estava em busca da resposta novamente (não chega por email?).
        Infelizmente não funcionou, inclusive utilizei mesmo código do link que você enviou, mas agora simplesmente não filtra a coluna selecionada no target.

        Que porcaria! :/

          • Oi Juliano!
            Acabei não respondendo, mas hoje fui fazer novamente seguindo este seu exemplo e funcionou perfeitamente.

            Muitissimo obrigada! :)

  • Boa Tarde Juliano, ótima solução, parabéns !
    é possível setar mais de um target ?
    como targets: 0,1 ???

    • Boa tarde Ricardo,
      muito obrigado.

      É possível sim, utilize a função assim:

      columnDefs: [
      { type: 'date-br', targets: [0, 1] }

      ],

      Abs Juliano

Posts relacionados