Example 2: Legacy MomentJs Sorting

HTML

<script src="https://cdn.datatables.net/1.7.5/js/jquery.dataTables.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.4/moment.min.js"></script>
 <table id="table">
    <thead>
       <tr>
         <th>Date</th>
       </tr>
    </thead>
    <tbody>
      <tr>
         <td>March 2015</td>
      </tr>
      <tr>
         <td>January 2015</td>
      </tr>
      <tr>
         <td>December 2014</td>
      </tr>
      <tr>
         <td>August 2015</td>
      </tr>
      <tr>
          <td>01.02.15 - 15.02.15</td>      
      </tr>
      <tr>
          <td>15.11.14 - 30.11.14</td>      
      </tr>
    </tbody>
</table>

JavaScript

(function($) {
 
    function parseFormatToUnix(value, format, locale) {
	    return value === '' || value === null ?
		    -Infinity :
		    parseInt( moment (value, format, locale, true ).format( 'x' ), 10 );
    }

    function getSpecialValueAndFormat(value) {
    
        //Remove tags, then remove \n and whitespaces
        value = value.replace ? value.replace(/<.*?>/g, '').replace(/(\r\n|\n|\r)/gm,'').trim(): value;
    
        if(/^[a-zA-Z]/.test(value.trim())) {
            return {value: value, format: "MMMM YYYY"};
        } else {
            value = value.trim().split(" - ")[0];
            return {value: value, format: "DD.MM.YY"};
        }
    }

    $.fn.dataTableExt.oSort['custom-date-asc']  = function(x,y) {
    
        var specialFormatX = getSpecialValueAndFormat(x);
        var specialFormatY = getSpecialValueAndFormat(y);
    
        var parsedX = parseFormatToUnix(specialFormatX.value, specialFormatX.format, "en");
        var parsedY = parseFormatToUnix(specialFormatY.value, specialFormatY.format, "en");
    
        return parsedX - parsedY;
    };
    
    $.fn.dataTableExt.oSort['custom-date-desc'] = function(x,y) {
        var specialFormatX = getSpecialValueAndFormat(x);
        var specialFormatY = getSpecialValueAndFormat(y);
    
        var parsedX = parseFormatToUnix(specialFormatX.value, specialFormatX.format, "en");
        var parsedY = parseFormatToUnix(specialFormatY.value, specialFormatY.format, "en");
    
        return parsedY - parsedX ;
    };
    
}(jQuery));

$(document).ready(function() {
    $('#table').dataTable({
        "bLengthChange": false,
        "bFilter": false,
        "bInfo": false,
        "bSort": true,
        "aoColumns" : [ 
                { sType: "custom-date" }
        ]
    });
});