Is there a way to shim the “dd-MON-yyyy” date format for IE

http://stackoverflow.com/questions/16449934/is-there-a-way-to-shim-the-dd-mon-yyyy-date-format-for-ie

by Jeromy French

HTML

<script src="//ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.4/jquery.dataTables.min.js"></script>
<link rel="stylesheet" href="//ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.4/css/jquery.dataTables.css">
<script src="//appliedinter.net/Workstream/common_files/js/modernizr.custom.40623.js"></script>
<table cellpadding="0" cellspacing="0" border="0" class="datatable" id="example" width="100%">
    <thead>
        <tr>
            <th>Name</th>
            <th>Date of Birth</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>Carla</td>
            <td>30-MAY-2012</td>
        </tr>
        <tr>
            <td>Jim</td>
            <td>09-MAY-2012</td>
        </tr>
        <tr>
            <td>Jeromy</td>
            <td>08-May-2012</td>
        </tr>
        <tr>
            <td>Kathy</td>
            <td>07-MAY-2012</td>
        </tr>
        <tr>
            <td>Bill</td>
            <td>01-JAN-2013</td>
        </tr>
        <tr>
            <td>Anne</td>
            <td>31-DEC-2011</td>
        </tr>
        <tr>
            <td>Jessica</td>
            <td>15-JUN-2010</td>
        </tr>
        <tr>
            <td>Carla</td>
            <td>30-MAY-2012</td>
        </tr>
        <tr>
            <td>Jim</td>
            <td>09-MAY-2012</td>
        </tr>
        <tr>
            <td>Jeromy</td>
            <td>08-May-2012</td>
        </tr>
        <tr>
            <td>Kathy</td>
            <td>07-MAY-2012</td>
        </tr>
        <tr>
            <td>Bill</td>
            <td>01-JAN-2013</td>
        </tr>
        <tr>
            <td>Anne</td>
            <td>31-DEC-2011</td>
        </tr>
        <tr>
            <td>Jessica</td>
            <td>15-JUN-2010</td>
        </tr>
        <tr>
            <td>Carla</td>
            <td>30-MAY-2012</td>
        </tr>
        <tr>
            <td>Jim</td>
            <td>09-MAY-2012</td>
        </tr>
        <tr>
            <td>Jeromy</td>
            <td>08-May-2012</td>
       ...

JavaScript

//spoof IE conditionals provided by base HTML (<!--[if IE 7]>    <html class="no-js lt-ie9 lt-ie8" lang="en"> <![endif]-->)
$('html').addClass('lt-ie9');

if ($('html.lt-ie9').length) {
    var customDateDDMMMYYYYToOrd = function (date) {
        "use strict"; //let's avoid tom-foolery in this function
        // Convert to a number YYYYMMDD which we can use to order
        var dateParts = date.split(/-/);
        return (dateParts[2] * 10000) + ($.inArray(dateParts[1].toUpperCase(), ["JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"]) * 100) + dateParts[0];
    };
    
    // This will help DataTables magic detect the "dd-MMM-yyyy" format; Unshift so that it's the first data type (so it takes priority over existing)
    jQuery.fn.dataTableExt.aTypes.unshift(
        function (sData) {
            "use strict"; //let's avoid tom-foolery in this function
            if (/^([0-2]?\d|3[0-1])-(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)-\d{4}/i.test(sData)) {
                return 'custom-date-dd-mmm-yyyy';
            }
            return null;
        }
    );
    
    // define the sorts
    jQuery.fn.dataTableExt.oSort['custom-date-dd-mmm-yyyy-asc'] = function (a, b) {
        "use strict"; //let's avoid tom-foolery in this function
        var ordA = customDateDDMMMYYYYToOrd(a),
            ordB = customDateDDMMMYYYYToOrd(b);
        return (ordA < ordB) ? -1 : ((ordA > ordB) ? 1 : 0);
    };
    
    jQuery.fn.dataTableExt.oSort['custom-date-dd-mmm-yyyy-desc'] = function (a, b) {
        "use strict"; //let's avoid tom-foolery in this function
        var ordA = customDateDDMMMYYYYToOrd(a),
            ordB = customDateDDMMMYYYYToOrd(b);
        return (ordA < ordB) ? 1 : ((ordA > ordB) ? -1 : 0);
    };
};

$('table.datatable').dataTable();