Mit dem Tablesorter-Plugin von Christian Bach kann eine Tabelle schnell und wirklich elegant aufgewertet werden. Das Plugin ermöglicht eine Sortierung über Tabellenspalten. In dem Plugin sind bereits einige Sortieralgorithmen implementiert, allerdings ist eine Sortierung einer Tabellenspalte mit deutschem Datumsformat nicht möglich. 

Das Tablesorter-Plugin bietet aber die Möglichkeit einen eigenen Sortieralgorithmus zu definieren und später einer Tabellenspalte zuzuweisen. Genau diesen Schritt hat Ulrich bereits getan und für das deutsche Datumsformat einen Parser erstellt. Dieser Parser stellt einen Sortieralgorithmus für das Datum im deutschen Datumsformat (dd.mm.yyyy) zur Verfügung.

$.tablesorter.addParser({
  id: 'germandate',
  is: function(s) {
          return false;
  },
  format: function(s) {
    var a = s.split('.');
    a[1] = a[1].replace(/^[0]+/g,"");
    return new Date(a.reverse().join("/")).getTime();
  },
  type: 'numeric'
});

Für ein Projekt benötigte ich genau solch einen Parser, allerdings im Datetime-Format, also inkl. Stunden- und Minutenangabe. Dafür habe ich einfach das vorhandene Skript von Ulrich erweitert, so dass das Datetime-Format in der Form “dd.mm.yyyy hh:mm” geparst werden kann. Der folgende Parser sortiert also anhand des Datetime-Formats “dd.mm.yyyy hh:mm“:

$.tablesorter.addParser({
    id: 'germandatetime',
    is: function(s) {
       return false;
    },
    format: function(s) {
      var a = s.split('.');
      a[1] = a[1].replace(/^[0]+/g,"");
      tmp = a[2].split(' ');
      a[2] =  tmp[0];
      t = tmp[1].split(':');
      return new Date(a[2],a[1]-1,a[0],t[0],t[1],0).getTime();
    },
    type: 'numeric'
});

Eingebunden in das Tablesorter-Plugin sieht die Variante dann folgendermaßen aus:

$(document).ready(function(){
  $.tablesorter.addParser({
      id: 'germandatetime',
      is: function(s) {
    	  return false;
      },
     format: function(s) {
       var a = s.split('.');
       a[1] = a[1].replace(/^[0]+/g,"");
       tmp = a[2].split(' ');
       a[2] =  tmp[0]
       t = tmp[1].split(':');
       return new Date(a[2],a[1]-1,a[0],t[0],t[1],0).getTime();
    },
    type: 'numeric'
  });
  $("#example").tablesorter({
    headers: { 1: { sorter:'germandatetime' }}
  });
});

Vielen Dank noch einmal an Ulrich für den Grundstein des Parsers.