【问题标题】:Datatable sorting is not working for dd-mm-yyyy format数据表排序不适用于 dd-mm-yyyy 格式
【发布时间】:2015-09-25 01:27:58
【问题描述】:

我想对数据表上的日期进行排序。我希望它以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>

【问题讨论】:

    标签: javascript jquery ajax date datatables


    【解决方案1】:

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

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

    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; 
    }
    

    【讨论】:

      【解决方案2】:

      这对我有用

      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));
      }
      });
      

      【讨论】:

        【解决方案3】:
        【解决方案4】:

        sorting plug-ins 可用,但是除了datetime-moment 之外,它们都不支持您需要的格式。但是datetime-moment插件对moment.js有依赖。

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

        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 ] }
            ]
        } );
        

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

          • 坦克,这就是我要找的。我尝试使用“dd-mm-YYYY”,但没有成功。
          猜你喜欢
          • 2015-01-24
          • 1970-01-01
          • 2017-11-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-07-02
          • 1970-01-01
          • 2016-01-02
          相关资源
          最近更新 更多