如何在jQuery DataTable中按日期排序

时间:2017-04-29 08:03:17

标签: javascript jquery jquery-plugins datatables

我必须按日期列对值进行排序。我正在使用jQuery Datatable,这里排序不按日期提交。

var settings = {
    ajax: {
        url: url.toString(),
        type: "POST",
        beforeSend:function() {
            showSpinner(".spinnerDiv", true);
        },
        complete:function() {
            showSpinner(".spinnerDiv", false);
        },
        data: function ( d ) {
            d.selectedButtonName = $("#selected_button_name").val();
            d.salesDaysToDisplay = $("#salesDaysToDisplay").val();
            d.selectedContributorUserId = $("#selected_contributor_userid").val();
        }
    },
    order: [[12,"desc"]],
    pageLength: 100,
    columns : [
        { data: "cashOutId" },
        { data: "thumbnail" },
        { data: "thumbnail" },
        { data: "invoiceNo" },
        { data: "saleDate" },
        { data: "salePaymentStatus" },
        { data: "docId" },
        { data: "description" },
        { data: "customerName" },
        { data: "intlPaymentAmount" },
        { data: "exchangeRate" },
        { data: "totalAmount" }

    ],
    columnDefs: [
        {
            "render": function (data, type, row) {
                var result = "";
                var cashOutAmount = row.cashOutAmount.replace("$", "").replace(",", "");
                var disableCashOut = (Math.sign(cashOutAmount) == -1) ? "disabled='disabled' checked" : "";
                if (row.paymentStatus == 'Unpaid' && row.saleDate && !row.isRedOrBlue) {
                    result = "<input type='checkbox' class='cashOutCb' "+disableCashOut+" value='" + data + "' data-cashoutamount='" + cashOutAmount + "'/>";
                }

                return result;
            },
            "targets": [0]
        },
        {
            "render": function (data, type, row) {
                return "<image class='tinyThumb' src='" + data + "'/>";
            },
            "targets": [1]
        },
        {
            "render": function (data, type, row) {
                return "<a href='" + data + "'>"+data+"</a>";
            },
            "targets": [2]
        },
        {
            "sType": "royaltiesTrxDateTime",
            "targets" : [4]
        },
        {
            "render": function (data, type, row, meta) {
                var shortDescription = data, len = data.length, result = "", rowIndex = "fullDescription"+meta.row;

                if (len > 75) {
                    shortDescription = shortDescription.substring(0, 75);
                    result = '<div><span id="'+rowIndex+'" style="display:none;">'+data+' <a class="showLess" href="javascript:void(0);">less</a></span><span class="shortDescription">'+shortDescription+' ...  <a data-id='+meta.row+' href="javascript:void(0);" class="showMore">more</a></span></div>';
                } else {
                    result = "<div>"+shortDescription+"</div>";
                }
                return result;
            },
            "targets": [7]
        },
        { "class": "dtRightAlign", "targets": [11, 13, 14, 15] },
        { "class": "hideInDatatable", "targets": [2, 9, 10, 17, 18, 19, 20, 22, 23, 24, 25, 26] },
        { targets: '_all', sortable: true, searchable: true }
    ],
    "footerCallback": function () {
        var api = this.api(), columns = [11, 13, 15];
        var colspanA = [9, 1, 1], colspanB = [1, 1, 2];
        $('tfoot tr').html("");
        var fclass = "dtRightAlign";
        for (var i = 0; i < columns.length; i++) {
            var pageTotal = api.column(columns[i], {filter: 'applied', page: 'current'}).data().sum();
            var total = api.column(columns[i], { filter: 'applied' }).data().sum();
            if (pageTotal != 0 || total != 0)
                $('tfoot tr').append('<td colspan="'+colspanA[i]+'" class="'+fclass+'"> $' + parseFloat(total).toFixed(2) + '</td><td colspan="'+colspanB[i]+'"></td>');
        }
    },
    dom: 'T<"clear">lfrtip',
    "oTableTools": {
        "sSwfPath":'<%=request.getContextPath()+"/js/copy_csv_xls_pdf.swf"%>',
        "aButtons": [
            {
                "sExtends": "xls",
                "sFileName" : "Contributor Report-"+timeStamp+".csv",
                "sTitle" : "Contributor Report",
                "mColumns": [2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26],
                "sButtonText": "Create Excel Report",
                "aButtons":["xls"]
            }
        ],
    }
};

dataTable = $('#purchase-table').DataTable(settings);

对于日期排序,我使用以下方法。

jQuery.fn.dataTableExt.oSort["royaltiesTrxDateTime-desc"] = function (x, y) {
    var dateStr1 = x, dateStr2 = y;
    var d1 = moment(dateStr1.trim(), 'D-MMM-YYYY HH:mm', true).format();
    var d2 = moment(dateStr2.trim(), 'D-MMM-YYYY HH:mm', true).format();
    return moment(d1).isAfter(moment(d2)) ? -1 : 1;
};

jQuery.fn.dataTableExt.oSort["royaltiesTrxDateTime-asc"] = function (x, y) {
    return jQuery.fn.dataTableExt.oSort["royaltiesTrxDateTime-desc"](y, x);
}

上面的jQuery函数在其他地方工作正常,这里工作不正常。提前谢谢。

0 个答案:

没有答案