Pergunta

Eu estou usando tablesorter plugin para classificar minhas tabelas em um MVC .NET App. A maioria das minhas colunas são cadeias e eu estou tendo problemas com eles. Nem com os numéricos. A coisa é minhas colunas de data e hora também estão sendo classificadas como se fossem strings. Eles são classificadas como esta: 01/04/2009, 02/02/2009, 03/08/2009, etc. I obter os dados do modelo em que Ver

.

Meu chamado é o padrão:

$("#table").tablesorter();

Eu tentei especificando dateformat sem sorte:

$("#table").tablesorter({
            dateFormat: 'dd/mm/yyyy'});

O estranho acontece quando eu digitar manualmente uma tabela estática com datas aleatórias. Ele fica resolvido! Mas os meus dados vem de uma chamada DB e é colocado no modelo, então eu itreate através dela e write tr é com os dados.

Agradecemos antecipadamente.

EDIT: Poderia ser algo relacionado com a forma como eu crio do tr

?
<% foreach (var item in Model) { %>
<tr>
<td>
<%= Html.Encode(item.date) %>
</td>
<td>...</td>
<td>...</td>
<td>...</td>
</tr>
<% } %>
Foi útil?

Solução

Tente adicionar um analisador Tablesorter à sua coluna de data. Tablesorter vem com um analisador para shortDate, usLongDate e ISODate.

$("#table").tablesorter({
    headers: { colNum: { sorter: 'shortDate'} }
});

onde colNum é a coluna com as datas. O único exemplo que eu poderia encontrar no site tablesorter é aqui . Isso também funciona se tablesorter está classificando números errado também. Há outros analisadores, bem como para por cento, endereço IP e muito mais. Dê uma olhada perto do final do código-fonte e eles vão ser listado lá.

Editar: Ao olhar para o código-fonte, a opção dateFormat parece estar olhando apenas para "nós", "uk", "dd / mm / aa" ou "dd-mm-aa". O que acontece quando você tenta "uk"?

Outras dicas

Eu tenho o mesmo problema, e eu adicionei um analisador personalizado chamado de data e hora:

$.tablesorter.addParser({
    id: "datetime",
    is: function(s) {
        return false; 
    },
    format: function(s,table) {
        s = s.replace(/\-/g,"/");
        s = s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/, "$3/$2/$1");
        return $.tablesorter.formatFloat(new Date(s).getTime());
    },
    type: "numeric"
});

Em seguida, você só precisa aplicar esse formato para as colunas que você deseja, como Gabe G exposta (Por exemplo, para atribuir este classificador para a primeira coluna que você deve fazer o seguinte:

$("#mytable").tablesorter( 
    {   dateFormat: 'dd/mm/yyyy', 
        headers: 
            {
                0:{sorter:'datetime'}
            } 
    } ); 

Você também pode adicionar uma tag span escondido antes de sua data no formato numérico (AAAAMMDD). Este texto vai vir em primeiro lugar e ser usadas para a classificação, mas ele vai ser escondido da vista e só mostram o formato desejado.

    <td><span style="display:none">20130923</span>23 September 2013</td>    

Não existe uma atualização para jQuery tablesorter plugin.

De acordo com a localidade do seu aplicativo, você pode classificar as datas por esta actualização.

Você pode ver a atualização do tablesorter seguindo o link abaixo.

http://tablesorter.openwerk.de/

Mais fácil utilização maneira:

dateFormat:'mm/dd/yyyy hh:mm:ss'

Para ser honesto a solução mais simples para mim era, como compsmart disse, acrescentando algum texto escondido na frente da data real.

  • dateFormat: 'uk' não estava funcionando para mim, talvez porque o meu formato de data é novamente diferente
  • http://tablesorter.openwerk.de/ envolve modificar o CSS, primeiro eu não entendo por que e segundo o esforço é maior do que simples adição de texto oculto na frente da data.

Eu gosto da solução beijo de compsmart!

http://mottie.github.io/tablesorter/docs/

Definir o formato da data. Aqui estão as opções disponíveis. (V2.0.23 Modificado).

  • "MMDDAAAA" (padrão)
  • "ddmmaaaa"
  • "AAAAMMDD"

Nas versões anteriores, esta opção foi definida como "nós", "uk" ou "dd / mm / aa". Esta opção foi modificada para melhor ajuste necessário formatos de data. Ele só vai funcionar com quatro anos dígito!

O classificador deve ser definido como "shortDate" e o formato da data pode ser definido na opção "dateFormat" ou set por colunas específicas dentro da opção "cabeçalhos". Veja a página de demonstração para vê-lo trabalhando.

$(function(){
  $("table").tablesorter({

    dateFormat : "mmddyyyy", // default date format

    // or to change the format for specific columns,
    // add the dateFormat to the headers option:
    headers: {
      0: { sorter: "shortDate" }, // "shortDate" with the default dateFormat above
      1: { sorter: "shortDate", dateFormat: "ddmmyyyy" }, // day first format
      2: { sorter: "shortDate", dateFormat: "yyyymmdd" }  // year first format
    }

  });
}); 

colunas individuais podem ser modificados, adicionando a seguinte (todos eles fazem a mesma coisa), conjunto em ordem de prioridade (v2.3.1 Modificado):

  • dados jQuery dados dateFormat = "MMDDAAAA".
  • classe de metadados = "{dateFormat: 'MMDDAAAA'}". Isso requer o plug-in de metadados.
  • cabeçalhos de opção de cabeçalhos: {0: {dateFormat: 'MMDDAAAA'}}.
  • classe cabeçalho class name = "dateFormat-MMDDAAAA". opção geral dateFormat.

No meu caso eu usei

$("#myTable").tablesorter({dateFormat: "uk"}) 

para a versão.

Esta foi a resposta para mim:

<td data-order=<fmt:formatDate pattern = "yyyy-MM-dd" value = "${myObject.myDate}" />>${myObject.myDate}</td>

mais detalhes, aqui: https://datatables.net/manual/data/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top