Frage

Ich versuche, eine Tabelle zu sortieren, die Spalte wie 2009-12-17 23:59:59.0 hat. Ich verwende unter Art anwenden

$(document).ready(function() 
        { 
            $("#dataTable").tablesorter();  
        } 
    );

Aber es funktioniert nicht für das gewählte Datum Format yyyy-mm-dd. Kann jemand empfehlen, wie kann ich zum Sortieren dieses Format gelten?

War es hilfreich?

Lösung

Die richtige Sache zu tun wäre, einen eigenen Parser für dieses benutzerdefinierte Format hinzuzufügen.

Überprüfen Sie dies einen Griff zu bekommen, wie das funktioniert.

jQuery Tablesorter: Fügen Sie Ihren eigenen Parser

Dann nehmen Sie einen Blick in die tablesorter Quelle (Suche nach uslongdate, shortdate und dann beobachten, wie die Parser für Datumsformate intern von tablesorter fertig sind. Jetzt ist Ihre Selbst einen ähnlichen Parser für Ihr spezielles Datumsformat konstruieren.

jquery.tablesorter.js

Dies sollte nach Ihren Wünschen arbeiten

ts.addParser({
    id: "customDate",
    is: function(s) {
        //return false;
        //use the above line if you don't want table sorter to auto detected this parser
        //else use the below line.
        //attention: doesn't check for invalid stuff
        //2009-77-77 77:77:77.0 would also be matched
        //if that doesn't suit you alter the regex to be more restrictive
        return /\d{1,4}-\d{1,2}-\d{1,2} \d{1,2}:\d{1,2}:\d{1,2}\.\d+/.test(s);
    },
    format: function(s) {
        s = s.replace(/\-/g," ");
        s = s.replace(/:/g," ");
        s = s.replace(/\./g," ");
        s = s.split(" ");
        return $.tablesorter.formatFloat(new Date(s[0], s[1]-1, s[2], s[3], s[4], s[5]).getTime()+parseInt(s[6]));
    },
    type: "numeric"
});

Jetzt gilt es nur auf die Spalte, in der Sie dieses Format haben (zB unter der Annahme der Spalte Ihre benutzerdefinierten Daten in residieren sind in Spalte Nr 7 (6 bedeutet, Spalte 7, weil die Anordnung der Spalten zerobased wird)

$(function() {
    $("table").tablesorter({
        headers: {
            6: { sorter:'customDate' }
        }
    });
});

Andere Tipps

sortieren UK / European Datumsformat TT / MM / yyyy durch:

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

Wenn Sie Datums- / Uhrzeitformat wie mm / tt / hh verwenden: mm verwenden Sie dann unter

$.tablesorter.addParser({ 
        id: "customDate",
        is: function(s) {
            //return false;
            //use the above line if you don't want table sorter to auto detected this parser                        
            //21/04/2010 03:54 is the used date/time format 
            return /\d{1,2}\/\d{1,2}\/\d{1,4} \d{1,2}:\d{1,2}/.test(s);
        },
        format: function(s) {
            s = s.replace(/\-/g," ");
            s = s.replace(/:/g," ");
            s = s.replace(/\./g," ");
            s = s.replace(/\//g," ");
            s = s.split(" ");                       
            return $.tablesorter.formatFloat(new Date(s[2], s[1]-1, s[0], s[3], s[4]).getTime());                                         
        },
        type: "numeric"} );

Mit der neuesten Version 2.18.4 können Sie einfach mögen this.Just das Standarddatumsformat geben und in der jeweiligen Spalte die Spalte Datumsformat, das wird funktionieren nur mit ‚shortdate‘ Sortierer.

$('YourTable').tablesorter(
            {
                dateFormat:'mmddYYYY',
                headers: {
                    0: { sorter: false },
                    1: { sorter: true},
                    2: { sorter: true },
                    3: { sorter: true },
                    4: { sorter: "shortDate", dateFormat: "ddmmyyyy" },
                    5: { sorter: true },
                    6: { sorter: false },
                    7: { sorter: false },
                    8: { sorter: false },
                    9: { sorter: false },
                    10: { sorter: false },
                    11: { sorter: false }

                }
            });

Keine Notwendigkeit, neue Parser erstellen nur verwenden, um die exisitng eines mit wenig Änderung.
1. Öffnen jQuery-Plugin js, in dem Sie die folgenden script.Now nur das Datumsformat ändern (gewünschte) für die letzten sonst, wenn in Ihrem Fall sehen es "yy-mm-dd".

    ts.addParser({
    id: "shortDate",
    is: function (s) {
        return /\d{1,2}[\/\-]\d{1,2}[\/\-]\d{2,4}/.test(s);
    }, format: function (s, table) {
        var c = table.config;
        s = s.replace(/\-/g, "/");
        if (c.dateFormat == "us") {
            // reformat the string in ISO format
            s = s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/, "$3/$1/$2");
        } else if (c.dateFormat == "uk") {
            // reformat the string in ISO format
            s = s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/, "$3/$2/$1");
        } else if (c.dateFormat == "yy-mm-dd" || c.dateFormat == "dd-mm-yy") {
            s = s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{2})/, "$1/$2/$3");
        }
        return $.tablesorter.formatFloat(new Date(s).getTime());
    }, type: "numeric"
});



2. Sie nun den letzten Schritt durch Jitter erwähnt folgen, aber mit wenig Änderung.

$(function() {
$("table").tablesorter({
    headers: {
        6: { sorter:'shortDate' }
    }
});
});

Datumsformat: "mmddyyyy", // das Standarddatumsformat

Beispiel-Option-date-Format

Fügen Sie einfach eine andere Wahl funktioniert perfekt für mich das Datumsformat zu sortieren ( TT / MM / JJJJ hh: mm: ss ). Durch die Verwendung der js Tables Plugin.

Fügen Sie den Code unten an deine ist Code:

$(document).ready(function () {
oTable = $('#AjaxGrid').dataTable({
"aLengthMenu": [[5, 10, 25, 50, 100, 500,1000,-1], [5, 10, 25, 50, 100,500,1000,"All"]],
iDisplayLength: 1000,
aaSorting: [[2, 'asc']],
bSortable: true,
aoColumnDefs: [
{ "aTargets": [ 1 ], "bSortable": true },
{ "aTargets": [ 2 ], "bSortable": true },
{ "aTargets": [ 3 ], "bSortable": true },
{ "aTargets": [ 4 ], "bSortable": true },
{"aTargets": [ 5 ], "bSortable": true, "sType": "date-euro"},
{"aTargets": [ 6 ], "bSortable": true, "sType": "date-euro"},
{ "aTargets": [ 7 ], "bSortable": false }
],
"sDom": '<"H"Cfr>t<"F"ip>',
"oLanguage": {
"sZeroRecords": "- No Articles To Display -",
"sLengthMenu": "Display _MENU_ records per page",
"sInfo": " ", //"Displaying _START_ to _END_ of _TOTAL_ records",
"sInfoEmpty": " ", //"Showing 0 to 0 of 0 records",
"sInfoFiltered": "(filtered from _MAX_ total records)"
},
"bJQueryUI": true
});
});


//New code
jQuery.extend( jQuery.fn.dataTableExt.oSort, {
"date-euro-pre": function ( a ) {
if ($.trim(a) != '') {
var frDatea = $.trim(a).split(' ');
var frTimea = frDatea[1].split(':');
var frDatea2 = frDatea[0].split('/');
var x = (frDatea2[2] + frDatea2[1] + frDatea2[0] + frTimea[0] + frTimea[1] + frTimea[2]) * 1;
} else {
var x = 10000000000000; // = l'an 1000 ...
}

return x;
},

"date-euro-asc": function ( a, b ) {
return a - b;
},

"date-euro-desc": function ( a, b ) {
return b - a;
}
} );
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top