Problema com a ordenação datas com tablesorter jquery
-
11-09-2019 - |
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>
<% } %>
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.
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/