数据表排序不适用于 dd-mm-yyyy 格式

Datatable sorting is not working for dd-mm-yyyy format

我想对数据表中的日期进行排序。我希望它以这种格式执行 D-M-Y,但它不起作用。

当我将格式更改为 Y-M-D 时,它起作用了。但我需要这种格式 D-M-Y.

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script type="text/javascript">
       $(document).ready(function () {
           $('#est').dataTable({
               "bProcessing": true,
               "bServerSide": true,
               "sAjaxSource": '<?php echo base_url(); ?>index.php/welcome/tendersdatatable',
               "aaSorting": [
                   [3, "desc"]
               ],
               "bJQueryUI": true,
               "sPaginationType": "bootstrap",
               "iDisplayStart ": 20,
               "oLanguage": {},
               "fnInitComplete": function () {
                   //oTable.fnAdjustColumnSizing();
               },
               'fnServerData': function (sSource, aoData, fnCallback) {
                   $.ajax({
                       'dataType': 'json',
                       'type': 'POST',
                       'url': sSource,
                       'data': aoData,
                       'success': fnCallback
                   });
               }
           });
           $('.dataTables_filter input').addClass('form-control').attr('placeholder', 'Search...').css('margin-right', "4%");
           $('.dataTables_length select').addClass('form-control');
       });
</script>

有一个用于日期时间排序的插件。 Source。它确实有 moment.js 作为依赖项。

$.fn.dataTable.moment( 'D-M-Y');

sorting plug-ins available, however none of them except datetime-moment支持你需要的格式。但是 datetime-moment 插件与 moment.js.

有依赖关系

但是可以通过在初始化数据之前定义自定义排序方法 date-dmy 来完成 table。

jQuery.extend( jQuery.fn.dataTableExt.oSort, {
    "date-dmy-pre": function ( a ) {
        if (a == null || a == "") {
            return 0;
        }
        var date = a.split('-');
        return (date[2] + date[1] + date[0]) * 1;
    },

    "date-dmy-asc": function ( a, b ) {
        return ((a < b) ? -1 : ((a > b) ? 1 : 0));
    },

    "date-dmy-desc": function ( a, b ) {
        return ((a < b) ? 1 : ((a > b) ? -1 : 0));
    }
} );

要使用此自定义类型,您需要使用 aoColumnDefs 来设置所需的列类型,如下所示。我正在使用索引 0 来设置第一列的类型。为简单起见,省略了其他初始化选项。

$('#example').dataTable( {
    "aoColumnDefs": [
        { "sType": "date-dmy", "aTargets": [ 0 ] }
    ]
} );

如果有人需要,这个对我有用。 https://datatables.net/forums/discussion/2467/need-help-for-sorting-date-with-dd-mm-yyyy-format

这对我有用

jQuery.fn.dataTableExt.aTypes.unshift(
    function (sData) {
        if (sData !== null && sData.match(/^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[012])\/(19|20|21)\d\d$/)) {
            return 'date-uk';
        }
        return null;
    }
);
jQuery.extend(jQuery.fn.dataTableExt.oSort, {
"date-uk-pre": function (a) {
    if (a == null || a == "") {
        return 0;
    }
    var ukDatea = a.split('/');
    return (ukDatea[2] + ukDatea[1] + ukDatea[0]) * 1;
},

"date-uk-asc": function (a, b) {
    return ((a < b) ? -1 : ((a > b) ? 1 : 0));
},

"date-uk-desc": function (a, b) {
    return ((a < b) ? 1 : ((a > b) ? -1 : 0));
}
});

您不需要插件。您可以通过添加隐藏元素对其进行排序。

将日期转换为 YYYYMMDD 格式并添加到实际值 (DD/MM/YYYY) 中,将其包装在一个元素中,设置样式 display:none;到元素。现在日期排序将像正常排序一样工作。同样可以应用于 date-time 排序。

HTML

<table id="data-table">
   <tr>
     <td><span>YYYYMMDD</span>DD/MM/YYYY</td>
   </tr>
</table>

如果你像我一样使用 rails sintaxys 将是这样的:

<td> 
    <span> 
        <%= youmodel.created_at.strftime("%Y%m%d") %> 
    </span> 
    <%= youmodel.created_at.strftime("%d/%m/%Y") %> 
</td>

CSS

#data-table span {
    display:none; 
}