jquery datatable sort plugin for date type mm / dd / yyyy hh:mmAM / PM

时间:2014-11-11 12:35:09

标签: jquery jquery-datatables

真的遇到了大问题。我需要对日期列进行排序。但日期格式为`mm / dd / yyyy hh:mmAM / PM。我试过

jQuery.fn.dataTableExt.oSort['uk_date-asc']  = function(a,b) { 
    var ukDatea = $(a).text().split('/'); 
    var ukDateb = $(b).text().split('/'); 

    var x = (ukDatea[2] + ukDatea[0] + ukDatea[1]) * 1; 
    var y = (ukDateb[2] + ukDateb[0] + ukDateb[1]) * 1; 
     console.log("here");
    return ((x < y) ? -1 : ((x > y) ?  1 : 0)); 
}; 

jQuery.fn.dataTableExt.oSort['uk_date-desc'] = function(a,b) { 
    var ukDatea = $(a).text().split('/');
    var ukDateb = $(b).text().split('/'); 

    var x = (ukDatea[2] + ukDatea[0] + ukDatea[1]) * 1; 
    var y = (ukDateb[2] + ukDateb[0] + ukDateb[1]) * 1; 

    return ((x < y) ? 1 : ((x > y) ?  -1 : 0)); 
} 

但现在我不知道如何包括时间。请伙计们帮助我。

2 个答案:

答案 0 :(得分:4)

如果格式为mm/dd/yyyy hh:mmAM/PM,则此格式需要符合Date.parse()标准的格式才能在分钟mmAM /之间插入空格PM。因此,如果您这样做,您可以使用Date.parse()中返回的值来比较日期,包括时间:

jQuery.fn.dataTableExt.oSort['uk_date-pre'] = function(a) { 
    a = a.slice(0,-2)+' '+a.slice(-2);
    var date = Date.parse(a);
    return typeof date === 'number' ? date : -1;
}    
jQuery.fn.dataTableExt.oSort['uk_date-asc'] = function(a,b) { 
    return ((a < b) ? -1 : ((a > b) ? 1 : 0));
} 
jQuery.fn.dataTableExt.oSort['uk_date-desc'] = function(a,b) { 
    return ((a < b) ? -1 : ((a > b) ? -1 : 0));
} 

参见演示 - &gt;的 http://jsfiddle.net/ttfrxmsk/

演示使用以下时间戳:

  

01/27/2011 10:20 PM
  01/27/2011 10:19 PM
  01/27/2011 10:19上午   2014年10月13日下午4:10
  04/12/2011 11:20 AM   2013年10月13日下午4:20
  08/01/2012 10:20 PM
  07/10/2014 7:00 AM   08/01/2012 10:20 PM
  07/10/2014 7:00 AM

答案 1 :(得分:0)

我必须使用 mm/dd/yyyy 格式进行格式化和排序,所以我不得不做一些更改...

 $("#tblSearch").DataTable({
        "processing": true, // for show progress bar       
        "filter": false, // this is for disable filter (search box)    
        "orderMulti": false, // for disable multiple column at once
        "bDestroy": true,
        "order": [[1, "asc"]],
        data: data,
        "columns": [
            


        ],
        "language": {
            "emptyTable": "We couldn't find any result for the search"
        },
        "columnDefs": [
            
            {
                data: "date", "sType": "date-mmddyyyy", className: 'text-center', targets: [0]
            , "mRender": function (d, type, full) {
                d = new Date(d);
                month = '' + (d.getMonth() + 1),
                    day = '' + d.getDate(),
                    year = d.getFullYear();

                if (month.length < 2)
                    month = '0' + month;
                if (day.length < 2)
                    day = '0' + day;

                return [month, day, year].join('/');
            }  }
        ],
    });
    jQuery.extend(jQuery.fn.dataTableExt.oSort, {
        "date-mmddyyyy-pre": function (a) {
            var dateFormat = a.split('/');
            return (dateFormat[2] + dateFormat[0] + dateFormat[1]) * 1;
        },

        "date-mmddyyyy-asc": function (a, b) {
            return ((a < b) ? -1 : ((a > b) ? 1 : 0));
        },

        "date-mmddyyyy-desc": function (a, b) {
            return ((a < b) ? 1 : ((a > b) ? -1 : 0));
        }
    });