Question

J'utilise le plugin tablesorter pour trier mes tables dans un MVC App .NET. La plupart de mes colonnes sont des chaînes et j'ai aucun problème avec eux. Ni avec les numériques. La chose est mes colonnes datetime sont également classés se comme si elles étaient des chaînes. Ils se classés comme ceci:. 01/04/2009, 02/02/2009, 03/08/2009, etc. J'obtenir les données du modèle dans cette vue

Mon appel est celui par défaut:

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

J'ai essayé de préciser dateformat pas de chance:

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

La chose étrange se produit lorsque je tape manuellement une table statique avec des dates aléatoires. Il se triée! Mais mes données provient d'un appel de DB et est mis dans le modèle, je itreate puis à travers et écrire tr est avec les données.

Merci d'avance.

EDIT: Pourrait-il être quelque chose lié à la façon dont je crée les années tr

<% foreach (var item in Model) { %>
<tr>
<td>
<%= Html.Encode(item.date) %>
</td>
<td>...</td>
<td>...</td>
<td>...</td>
</tr>
<% } %>
Était-ce utile?

La solution

Essayez d'ajouter un analyseur tablesorter à votre colonne de date. Tablesorter est livré avec un analyseur pour shortDate, usLongDate et ISODate.

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

où colNum est la colonne avec les dates. Le seul exemple que je pouvais trouver sur le site tablesorter est . Cela fonctionne également si tablesorter est faux numéros d 'ordre aussi bien. Il existe d'autres parseurs et pour pour cent, l'adresse IP et plus encore. Jetez un oeil à la fin du code source et ils vont y figurer.

Edit: En regardant le code source, l'option dateFormat semble être à la recherche que pour "nous", "uk", "jj / mm / aa" ou "dd-mm-yy". Qu'est-ce qui se passe lorsque vous essayez "uk"?

Autres conseils

Je suis le même problème, et j'ai ajouté un datetime appelé analyseur personnalisé:

$.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"
});

Ensuite, vous avez juste besoin d'appliquer ce format aux colonnes que vous voulez, comme Gabe G exposé (Par exemple, pour attribuer cette trieuse à la première colonne que vous devez faire ce qui suit:

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

Vous pouvez également ajouter une balise span caché avant votre date en format numérique (aaaammjj). Ce texte viendra en premier et être utilisé pour le tri, mais il sera caché de la vue et seulement montrer le format que vous voulez.

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

Il existe une mise à jour pour le plugin jquery tablesorter.

Selon les paramètres régionaux de l'application, vous pouvez trier les dates par cette mise à jour.

Vous pouvez voir la mise à jour tablesorter en suivant le lien ci-dessous.

http://tablesorter.openwerk.de/

plus facile l'utilisation de façon:

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

Pour être honnête, la solution la plus simple pour moi était, comme l'a dit compsmart, en ajoutant un texte caché devant la date réelle.

  • dateFormat: 'uk' ne fonctionnait pas pour moi, peut-être parce que mon format de date est à nouveau différent
  • http://tablesorter.openwerk.de/ consiste à modifier le CSS, d'abord, je ne comprends pas pourquoi et deuxième l'effort est plus grand que la simple ajout de texte caché devant la date.

J'aime la solution KISS de compsmart!

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

Définir le format de date. Voici les options disponibles. (V2.0.23 Modifié).

  • "mmjjaaaa" (par défaut)
  • "jjmmaaaa"
  • "aaaammjj"

Dans les versions précédentes, cette option a été définie comme "nous", "uk" ou "jj / mm / aa". Cette option a été modifiée pour mieux les formats de date d'ajustement nécessaires. Il ne fonctionne qu'avec quatre ans de chiffres!

Le trieur doit être réglé sur « shortDate » et le format de date peut être définie dans l'option « dateFormat » ou ensemble pour une colonne spécifique dans l'option « en-têtes ». Voir la page de démonstration pour le voir travailler.

$(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
    }

  });
}); 

colonnes individuelles peuvent être modifiées en ajoutant ce qui suit (ils font tous la même chose), mettre en ordre de priorité (mise à jour v2.3.1):

  • données dateFormat de données jQuery = "mmjjaaaa".
  • classe de métadonnées = "{dateFormat: 'mmjjaaaa'}". Cela nécessite le plug-in de métadonnées.
  • en-têtes d'option de têtes: {0: {dateFormat: 'mmjjaaaa'}}.
  • nom de la classe d'en-tête class = "dateFormat-mmjjaaaa". option dateFormat globale.

Dans mon cas, je l'ai utilisé

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

pour la version.

était la réponse pour moi:

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

plus de détails, ici: https://datatables.net/manual/data/

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top