Ultimate Date / Time sorting

Sort date and time in any format using luxon

This plug-in for DataTables represents the ultimate option in extensibility for sorting date / time strings correctly. It uses luxon to create automatic type detection and sorting plug-ins for DataTables based on a given format. This way, DataTables will automatically detect your temporal information and sort it correctly.

For usage instructions, please see the DataTables blog post that introduces it.

Plug-in code

(function (factory) {
    if (typeof define === "function" && define.amd) {
        define(["jquery", "luxon", "datatables.net"], factory);
    } else {
        factory(jQuery, luxon);
    }
}(function ($, luxon) {

function strip (d) {
    if ( typeof d === 'string' ) {
        // Strip HTML tags and newline characters if possible
        d = d.replace(/(<.*?>)|(\r?\n|\r)/g, '');

        // Strip out surrounding white space
        d = d.trim();
    }

    return d;
}

$.fn.dataTable.luxon = function ( format, locale, reverseEmpties ) {
    var types = $.fn.dataTable.ext.type;

    // Add type detection
    types.detect.unshift( function ( d ) {
        d = strip(d);

        // Null and empty values are acceptable
        if ( d === '' || d === null ) {
            return 'luxon-'+format;
        }

        return luxon.DateTime.fromFormat( d, format).isValid ?
            'luxon-'+format :
            null;
    } );

    // Add sorting method - use an integer for the sorting
    types.order[ 'luxon-'+format+'-pre' ] = function ( d ) {
        d = strip(d);
        
        return !luxon.DateTime.fromFormat(d, format).isValid ?
            (reverseEmpties ? -Infinity : Infinity) :
            parseInt( luxon.DateTime.fromFormat( d, format).ts, 10 );
    };
};

}));

CDN

This plug-in is available on the DataTables CDN:

JS

Note that if you are using multiple plug-ins, it is beneficial in terms of performance to combine the plug-ins into a single file and host it on your own server, rather than making multiple requests to the DataTables CDN.

Version control

If you have any ideas for how this plug-in can be improved, or spot anything that is in error, it is available on GitHub and pull requests are very welcome!

Example

$.fn.dataTable.luxon( 'HH:mm MMM d, yy' );
  $.fn.dataTable.luxon( 'EEE, MMMM Do, yyyy' );

  $('#example').DataTable();