2014-12-08 3 views
0

Я использую Datatable plugin. Я хочу, чтобы shorting на столбце Date Descending order, но не работал с merender. Я хочу использовать mRender также для форматирования даты. Для другого короткого замыкания столбца работает отличноDatatable shorting не работает с датой

См демо: http://jsfiddle.net/wwhy5d2e/

Здесь JS код:

$table = $('#KiList').dataTable({ 
    bAutoWidth: false, 
    aoColumns: [{ 
     'sWidth': '35%' 
    }, { 
     'sWidth': '20%', 
     "sType": "datetime-us" 
    }, { 
     'sWidth': '25%', 
     "sType": 'string' 
    }, { 
     'sWidth': '10%', 
     "sType": 'string' 
    }, { 
     'sWidth': '10%', 
     "sType": 'string' 
    }], 
    "aoColumnDefs": [{ 
     "aTargets": [1], 
     "mRender": function(date, type, full) { 
      return moment(date).format('MM-DD-YYYY hh:mm a'); 
     } 
    }], 
    aaSorting: [[1, 'desc']] 
}); 

ответ

0

Я получил эту работу: Working Demo

Ссылка: https://gist.github.com/mark47/10427687

$table = $('#KiList').dataTable({ 
    bAutoWidth: false, 
    aoColumns: [{ 
     'sWidth': '35%' 
    }, { 
     'sWidth': '20%', 
     "type": "datetime-us"//changed 
    }, { 
     'sWidth': '25%', 
     "sType": 'string' 
    }, { 
     'sWidth': '10%', 
     "sType": 'string' 
    }, { 
     'sWidth': '10%', 
     "sType": 'string' 
    }], 
    "aoColumnDefs": [{ 
     "aTargets": [1], 
     "mRender": function(date, type, full) { 
      return moment(date).format('MM-DD-YYYY hh:mm a'); 
     } 
    }], 
    aaSorting: [[1, 'desc']] 
}); 

Добавлено:

jQuery.extend(jQuery.fn.dataTableExt.oSort, { 
     "datetime-us": function (a) { 
     // If there's no slash, then it's not an actual date, so return zero for sorting 
     if(a.indexOf('/') === -1) { 
      return '0'; 
     } else { 
       // Set optional items to zero 
       var hour = 0, 
        min = 0, 
        ap = 0; 
        // Execute match. Requires month, day, year. Can be mm/dd or m/d. Can be yy or yyyy 
        // Time is optional. am/pm is optional 
        // TODO - remove extra time column from array 
       var b = a.match(/(\d{1,2})\/(\d{1,2})\/(\d{2,4})((\d{1,2}):(\d{1,2}))? ?(am|pm|AM|PM|Am|Pm)?/), 
        month = b[1], 
        day = b[2], 
        year = b[3]; 
       // If time exists then output hours and minutes 
       if (b[4] != undefined) { 
        hour = b[5]; 
        min = b[6]; 
       } 
       // if using am/pm then change the hour to 24 hour format for sorting 
       if (b[7] != undefined) { 
        ap = b[7]; 
        if(hour == '12') hour = '0'; 
        if(ap == 'pm') hour = parseInt(hour, 10)+12; 
       } 

       // for 2 digit years, changes to 20__ if less than 70 
       if(year.length == 2){ 
        if(parseInt(year, 10) < 70) year = '20'+year; 
        else year = '19'+year; 
       } 
       // Converts single digits 
       if(month.length == 1) month = '0'+month; 
       if(day.length == 1) day = '0'+day; 
       if(hour.length == 1) hour = '0'+hour; 
       if(min.length == 1) min = '0'+min; 
       var tt = year+month+day+hour+min; 

       return tt; 
      } 
     }, 
     "datetime-us-asc": function (a, b) { 
     return a - b; 
     }, 
     "datetime-us-desc": function (a, b) { 
     return b - a; 
     } 
    });