javascriptjquerydatatablesjquery-plugins

How to sort by Date with DataTables jquery plugin?


I am using the datatables jquery plugin and want to sorty by dates.

I know they got a plugin but I can't find where to actually download it from

http://datatables.net/plug-ins/sorting

I believe I need this file: dataTables.numericComma.js yet I can't find it anywhere and when I download datatables it does not seem to be in the zip file.

I am also not sure if I need to make my own custom date sorter to pass into this plugin.

I am trying to sort this format MM/DD/YYYY HH:MM TT(AM |PM)

Thanks

Edit

How can I change this to sort by MM/DD/YYYY HH:MM TT(AM |PM) and change it to U.S date?

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

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

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

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

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

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

Solution

  • Click on the "show details" link under Date (dd/mm/YYY), then you can copy and paste that plugin code provided there


    Update: I think you can just switch the order of the array, like so:

    jQuery.fn.dataTableExt.oSort['us_date-asc']  = function(a,b) {
        var usDatea = a.split('/');
        var usDateb = b.split('/');
    
        var x = (usDatea[2] + usDatea[0] + usDatea[1]) * 1;
        var y = (usDateb[2] + usDateb[0] + usDateb[1]) * 1;
    
        return ((x < y) ? -1 : ((x > y) ?  1 : 0));
    };
    
    jQuery.fn.dataTableExt.oSort['us_date-desc'] = function(a,b) {
        var usDatea = a.split('/');
        var usDateb = b.split('/');
    
        var x = (usDatea[2] + usDatea[0] + usDatea[1]) * 1;
        var y = (usDateb[2] + usDateb[0] + usDateb[1]) * 1;
    
        return ((x < y) ? 1 : ((x > y) ?  -1 : 0));
    };
    

    All I did was switch the __date_[1] (day) and __date_[0] (month), and replaced uk with us so you won't get confused. I think that should take care of it for you.


    Update #2: You should be able to just use the date object for comparison. Try this:

    jQuery.fn.dataTableExt.oSort['us_date-asc']  = function(a,b) {
     var x = new Date(a),
         y = new Date(b);
     return ((x < y) ? -1 : ((x > y) ?  1 : 0));
    };
    
    jQuery.fn.dataTableExt.oSort['us_date-desc'] = function(a,b) {
     var x = new Date(a),
         y = new Date(b);
     return ((x < y) ? 1 : ((x > y) ?  -1 : 0));
    };