Domanda

Sto utilizzando il plug-in Tablesorter per ordinare le mie tabelle in un'app MVC .NET.La maggior parte delle mie colonne sono stringhe e non ho problemi con esse.Nemmeno con quelli numerici.Il fatto è che anche le mie colonne datetime vengono ordinate come se fossero stringhe.Vengono ordinati in questo modo:01/04/2009, 02/02/2009, 03/08/2009, ecc.Ottengo i dati dal modello in quella vista.

La mia chiamata è quella predefinita:

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

Ho provato a specificare il formato della data senza fortuna:

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

La cosa strana accade quando digito manualmente una tabella statica con date casuali.Si sistema!Ma i miei dati provengono da una chiamata DB e vengono inseriti nel modello, quindi lo eseguo e scrivo tr con i dati.

Grazie in anticipo.

MODIFICARE:Potrebbe essere qualcosa legato al modo in cui creo le tr?

<% foreach (var item in Model) { %>
<tr>
<td>
<%= Html.Encode(item.date) %>
</td>
<td>...</td>
<td>...</td>
<td>...</td>
</tr>
<% } %>
È stato utile?

Soluzione

Prova ad aggiungere un parser Tablesorter alla colonna della data.Tablesorter viene fornito con un parser per shortDate, usLongDate e isoDate.

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

dove colNum è la colonna con le date.L'unico esempio che ho trovato sul sito tablesorter è Qui.Funziona anche se il tablesorter ordina i numeri in modo errato.Esistono anche altri parser per percentuale, indirizzo IP e altro.Dai un'occhiata verso la fine del codice sorgente e saranno elencati lì.

Modificare:Osservando il codice sorgente, l'opzione dateFormat sembra cercare solo "noi", "uk", "gg/mm/aa" o "gg-mm-aa".Cosa succede quando provi "uk"?

Altri suggerimenti

Ho riscontrato lo stesso problema e ho aggiunto un parser personalizzato chiamato datetime:

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

Quindi devi solo applicare quel formato alle colonne che desideri, come esposto Gabe G (ad esempio per assegnare questo selezionatore alla prima colonna dovresti fare quanto segue:

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

Puoi anche aggiungere un tag span nascosto prima della data in formato numerico (aaaammgg).Questo testo verrà per primo e verrà utilizzato per l'ordinamento, ma sarà nascosto alla vista e mostrerà solo il formato desiderato.

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

Esiste un aggiornamento per il plugin jquery tablessorter.

In base alla locale della tua applicazione, puoi ordinare le date in base a questo aggiornamento.

È possibile visualizzare l'aggiornamento del tablesorter seguendo il collegamento sottostante.

http://tablesorter.openwerk.de/

Modo più semplice per l'uso:

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

Ad essere onesti, la soluzione più semplice per me è stata, come ha detto compsmart, aggiungere del testo nascosto davanti alla data effettiva.

  • formato data:'UK' non funzionava per me, forse perché il formato della mia data è di nuovo diverso
  • http://tablesorter.openwerk.de/ comporta la modifica del CSS, in primo luogo non capisco perché e in secondo luogo lo sforzo è maggiore della semplice aggiunta di testo nascosto davanti alla data.

Mi piace la soluzione KISS di compsmart!

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

Imposta il formato della data.Ecco le opzioni disponibili.(V2.0.23 modificato).

  • "mmddyyyy" (predefinito)
  • "ggmmaaaa"
  • "aaaammgg"

Nelle versioni precedenti, questa opzione era impostata come "noi", "regno Unito" o "gg/mm/aa".Questa opzione è stata modificata per adattarsi meglio ai formati di data necessari.Funzionerà solo con anni a quattro cifre!

L'ordinatore deve essere impostato su "shortDate" e il formato della data può essere impostato nell'opzione "dateFormat" o impostato per colonne specifiche nell'opzione "headers".Guarda la pagina demo per vederlo funzionare.

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

  });
}); 

Le singole colonne possono essere modificate aggiungendo quanto segue (fanno tutte la stessa cosa), impostate in ordine di priorità (Modificato v2.3.1):

  • jQuery dati data-dateFormat="mmddyyyy".
  • classe metadati="{ dateFormat:'mmddyyyy'}".Ciò richiede il plug-in dei metadati.
  • intestazioni opzione intestazioni:{0:{ formato data :'mmggaaaa' } }.
  • nome della classe di intestazione class="dateFormat-mmddyyyy".Opzione dateFormat complessiva.

Nel mio caso ho usato

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

per la versione.

Questa è stata la risposta per me:

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

maggiori dettagli, qui: https://datatables.net/manual/data/

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top