【问题标题】:Datatable date sorting dd/mm/yyyy issue数据表日期排序dd/mm/yyyy问题
【发布时间】:2012-08-13 18:00:40
【问题描述】:

我正在使用一个名为 datatables 的 Jquery 插件

太棒了,但是我无法根据 dd/mm/yyyy 格式正确排序日期。

我查看了他们的支持格式,但这些修复似乎都不起作用。

这里有人可以帮帮我吗?

【问题讨论】:

  • 我看过它,但不明白如何将它应用于日期。我已经用正斜杠代替了破折号,但不确定其余的。它说它检查小数点后一位,你将如何检查两个破折号?
  • 你没有提到加载数据的方法,所以我添加了一个 AJAX 解决方案。我发现我的大部分表都是从浏览器内的数据开始的,但最终还是全部迁移到了 AJAX。

标签: jquery datatables date-sorting


【解决方案1】:

2020 年更新:HTML 解决方案

由于 HTML 5 已经如此发达,几乎所有主要浏览器都支持它。所以现在更简洁的方法是使用HTML5 data attributes (maxx777 提供了一个 PHP 解决方案,我使用的是简单的 HTML)。对于我们场景中的非数字数据,我们可以使用data-sortdata-order 属性并为其分配一个可排序的值。

HTML

<td data-sort='YYYYMMDD'>DD/MM/YYYY</td>

这里是working HTML solution

jQuery 解决方案

这里是working jQuery solution

jQuery.extend( jQuery.fn.dataTableExt.oSort, {
"date-uk-pre": function ( a ) {
    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));
}
} );
 

将上述代码添加到脚本中,并将日期值设置为 { "sType": "date-uk" } 和其他为空的特定列,见下文:

$(document).ready(function() {
    $('#example').dataTable( {
        "aoColumns": [
            null,
            null,
            null,
            null,
            { "sType": "date-uk" },
            null
        ]
    });
    });

【讨论】:

  • 你答对的速度比我快。我打算使用这个live.datatables.net/abarot/edit#javascript,html,但你的代码要好得多,而且时间更短。非常感谢您的帮助。仍然不确定如何使用较小的功能,但至少我知道它们是如何工作的。非常感谢您的帮助。
  • 我不知道我错过了什么,但这并没有正确地对日期进行排序,甚至在编辑后的链接中也没有。
  • 如果要将日期排序为字符串而不是数字,则必须删除“date-uk-pre”函数末尾的“ * 1”,它将返回的日期转换为数字。有了这个变化,玩起来像魅力! :)
  • 这是一个优雅的修复
  • css 解决方案更好,谢谢
【解决方案2】:

日期排序 - 带有隐藏元素

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

HTML

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

CSS

#data-table span {
    display:none; 
}

【讨论】:

  • 天啊,除此之外没有任何效果。如果您使用 Rails,这应该是您需要的代码(想法只是我使用的型号名称):&lt;td&gt; &lt;span&gt; &lt;%= idea.created_at.strftime("%Y%m%d") %&gt; &lt;/span&gt; &lt;%= idea.created_at.strftime("%d/%m/%Y") %&gt; &lt;/td&gt;
  • 不幸的是,当您使用数据表导出 pdf 插件时,它会占用您所有的 HTML 标签(包括隐藏的 HTML 标签)。结果是您导出的文件中的数据重复。它也导出&lt;span&gt;中的数据
  • @AnulalS 抱歉,我离开了键盘,刚刚看到你的 cmets。这是一个非常古老的帖子,我已经更新了我的答案。感谢指点指正。
  • @Are0215 您可以自定义生成的内容以从 span 中删除重复数据:buttons: [{extend: 'pdfHtml5', customize: function (doc) {doc.content[0].table .body.forEach(function (row) { row[5].text = row[5].text.split('').pop();});}}
  • 它对我有用,但我不明白它背后的逻辑。你能解释一下吗?
【解决方案3】:

我知道这是一个老问题,答案也很老。最近我遇到了一种简单而干净的日期排序方式。可以通过 HTML5 的 data-order 属性到 &lt;td&gt; 元素来完成。

这是我在 PHP 中所做的:

<?php
$newdate = date('d M Y', $myDateTime); // Format in which I want to display
$dateOrder = date('Y-m-d', $myDateTime); // Sort Order
?>

<td data-order="<?php echo $dateOrder; ?>" >
<?php echo $newdate; ?>
</td>

【讨论】:

【解决方案4】:

试试this 插件。

here 所述,您需要包含Moment.js 和datatable-moment 插件,然后只需声明您使用的日期格式。 该插件将自动检测您的日期列并按应有的方式对其进行排序。 moment.js 格式说明请查看here

例子:

$(document).ready(function() {
    $.fn.dataTable.moment('DD/MM/YYYY HH:mm');
    $('#example').DataTable();
});

【讨论】:

  • 如果包含时间怎么办?
  • @Eli 你试过$.fn.dataTable.moment('DD.MM.YYYY HH.mm.ss'); 吗?其中HH.mm.ss 是您的时间格式。 More
  • $.fn.dataTable.moment('YYYY.MM.DD HH.mm.ss');我用过这个,但它不起作用
  • 我的表中有一个 Date Created 列,但它没有被排序
  • 你的日期时间像2016.03.29 14.33.08吗?看example section。这完全取决于您的格式。
【解决方案5】:

这种方式对我有用。

<td data-order="@item.CreatedOn.ToString("MMddyyyyHHmmss")">
    @item.CreatedOn.ToString("dd-MM-yyyy hh:mm tt")
</td>

data-order 属性中的日期格式应该是 DataTable 支持的格式。

【讨论】:

  • 我认为这应该被认为是正确的解决方案。虽然数据排序可以达到目的,但 fitler 在数据表中无法正常工作。如果您想用“HH MM”对“YYYYMMDD”进行排序,这也无济于事。我从 - stackoverflow.com/questions/38079208/… 找到了类似的解决方案并尝试了实现,它解决了任何格式的日期排序之谜 - 例如:{this.formatDisplayDate(file.formatedPrintTime) }
  • 我尝试了“yyyyMMdd”的数据顺序,它正在工作。例如
【解决方案6】:

如果您不想使用momentum.js 或任何其他日期格式,您可以在日期值中添加以毫秒为单位的日期格式,以便按照毫秒进行排序。并隐藏毫秒日期格式。

示例代码:

var date = new Date();
var millisecond = Date.parse(date);

HTML

<td>'<span style="display: none;">' + millisecond + "</span>" + date + </td>

就是这样。

【讨论】:

    【解决方案7】:

    你可以用 php 解决这个问题。

    $mydate = strtotime($startdate);
    $newformat = date('d-m-Y',$mydate);
    echo '<tr>';
    echo '  <td data-sort="'. $mydate .'">'.$newformat .'</td>';
    

    【讨论】:

      【解决方案8】:

      另一种解决方案: https://datatables.net/blog/2014-12-18

      带有 2 个 JavaScript 库:

      1. cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.4/moment.min.js
      2. cdn.datatables.net/plug-ins/1.10.15/sorting/datetime-moment.js

      那么只有这个:

      $(document).ready(function() {
         $.fn.dataTable.moment( 'DD/MM/YYYY' );
         $('#example').DataTable(); 
      });
      

      【讨论】:

        【解决方案9】:

        虽然这个问题有很多答案,但我认为数据排序仅在“YYYYMMDD”中需要排序时才有效,并且在有小时/分钟时不起作用。使用数据排序时过滤器无法正常工作,至少我在尝试使用 React JS 时遇到了这个问题。

        我认为最好的解决方案是使用数据顺序,因为可以动态提供值以用于排序目的,并且在显示时格式可以不同。该解决方案功能强大,适用于任何日期格式,包括“DD/MM/YYYY HH:M”。

        例如:

        <td data-order={obj.plainDateTime}>{this.formattedDisplayDate(obj.plainDateTime) }</td>
        

        我从这里找到了这个解决方案 - How do I sort by a hidden column in DataTables?

        【讨论】:

          【解决方案10】:

          我试过这个并为我工作。

          https://github.com/sedovsek/DataTables-EU-date-Plug-In

          我使用格式模式.ToString("dd/MM/yyyy"); 然后在我的 jQuery.Datatable 中工作正常。

          jQ 下面

          oTable = $('#grid').dataTable({
              "sPaginationType": "full_numbers",
              "aoColumns": [
                  { "sType": "eu_date" },
                  null
              ]
          });
          });
          

          你有日期的列,你应该像上面的代码一样用 sType 定义。

          【讨论】:

          • 请详细说明它的工作原理,而不仅仅是发布代码和链接。
          【解决方案11】:

          在 php 或 js 中只需传递一个数组并使用正交,例如:

          $var[0][0] = "like as u wish, 30/12/2015 or something else";
          $var[0][1] = strtotime($your_date_variable);
          

          并且,在数据表中...

          $('#data-table-contas_pagar').dataTable({
              "columnDefs": [
                  {"targets":[0],"data": [0],"render": {"_": [0],"sort": [1]}}
              ]
          });
          

          【讨论】:

            【解决方案12】:

            如果您必须处理已经格式化的日期,Zaheer Ahmed 的解决方案可以正常工作。

            我对此解决方案有疑问,因为我必须管理美国格式的日期。

            我通过这个微小的变化想通了:

            function parseDate(a) {
                var ukDatea = a.split('/');
                return (ukDatea[2] + ukDatea[1] + ukDatea[0]) * 1;
            }
            
            jQuery.extend( jQuery.fn.dataTableExt.oSort, {
                "date-uk-pre": function ( a ) {
                    return parseDate(a);
                },
            
                "date-uk-asc": function ( a, b ) {
                    a = parseDate(a);
                    b = parseDate(b);
                    return ((a < b) ? -1 : ((a > b) ? 1 : 0));
                },
            
                "date-uk-desc": function ( a, b ) {
                    a = parseDate(a);
                    b = parseDate(b);
                    return ((a < b) ? 1 : ((a > b) ? -1 : 0));
                }
            });
            

            后跟您的“aoColumns”定义。

            【讨论】:

            • 我应该在哪里调用 parseDate?
            【解决方案13】:

            这个解决方案是完全错误的。您不能将日期转换为仅添加日期的每个组成部分的数字。例如,如果您尝试使用以下日期的这种逻辑,您会发现它不会正确匹配:

            20/01/2014 = 2035 15/02/2014 = 2031

            女巫日期在前,升序? 1月20日?不按照这个逻辑:P

            使用 parsedate 方法的正确方法是将字符串转换为有效的日期时间,然后使用 getTime 函数对表格进行正确排序。

            var day = a.split('/')[0]
            var month = a.split('/')[1]
            var year = a.split('/')[2]
            
            var date = new Date(month + "/" + day + "/" + year)
            return date.getTime()
            

            【讨论】:

              【解决方案14】:

              我想指出的是,当使用来自服务器的数据时通过 Ajax,解决方案非常简单,但可能不会立即显而易见。

              当返回排序顺序数组时,Datatables 将发送(在 $_POST 中)一个 2 元素数组,将等效于

              $_POST['order'][0] =array('column'=>'SortColumnName', 'dir'=>'asc'); 
              // 2nd element is either 'asc' or 'desc'
              

              因此,您可以以任何您想要的格式显示日期;只需让您的服务器仅根据 sortColumnName 返回排序标准。

              例如,在 PHP(使用 MySQL)中,我使用以下代码:

               if (isset($_POST['order'])) {
                        switch ($_POST['order'][0]['column']) {
                             case 0:// sort by Primary Key
                                  $order = 'pkItemid';
                                  break;
                             case 1:// Sort by reference number
                                  $order = 'refNo';
                                  break;
                             case 2://Date Started
                                  $order = 'dOpen';
                                  break;
                             default :
                                  $order = 'pkItemid';
                        }
                        $orderdir = ($_POST['order'][0]['dir'] === 'desc') ? 'desc' : 'asc';
                   }
              

              请注意,由于 $_POST 中的任何内容都不会传递给 $order$orderdir,因此不可能进行跨脚本攻击。

              现在,只需附加到 MySQL 查询:

              $sql ="SELECT pkItemid, refNo, DATE_FORMAT(dOpen,'%b %e, %Y') AS dateStarted
                     FROM tblReference 
                     ORDER BY $order $orderdir;";
              

              运行查询,并将 dateStarted 值返回到 json 中的数据表。

              【讨论】:

              • 应该注意必须开启服务器端处理才能工作。
              【解决方案15】:

              使用这个 sn-p!

              $(document).ready(function() {
               $.fn.dataTable.moment = function ( format, locale ) {
                  var types = $.fn.dataTable.ext.type;
              
                  // Add type detection
                  types.detect.unshift( function ( d ) {
                      return moment( d, format, locale, true ).isValid() ?
                          'moment-'+format :
                          null;
                  } );
              
                  // Add sorting method - use an integer for the sorting
                  types.order[ 'moment-'+format+'-pre' ] = function ( d ) {
                      return moment( d, format, locale, true ).unix();
                  };
              };
              
              $.fn.dataTable.moment('DD/MM/YYYY');
              
              $('#example').DataTable();
              });
              

              当 js 适用于所有日期和时间格式时,请在初始化数据表之前添加此剪辑器,就像我之前所做的那样。

              还记得加载http://momentjs.com/

              【讨论】:

                【解决方案16】:

                我也有同样的问题。

                我在 2017 年 3 月 21 日在 td 中使用 span,通过这样做,数据表将其视为字符串并且排序不起作用。

                我删除了 td 中的 span,它得到了修复。 比如,2017 年 3 月 21 日

                【讨论】:

                  【解决方案17】:

                  我在其余通话中使用过

                  **日期变量是:创建**

                  var call = $.ajax({
                              url: "../_api/Web/Lists/GetByTitle('NewUser')/items?$filter=(Created%20ge%20datetime'"+FromDate+"')%20and%20(Created%20le%20datetime'"+ToDate+"' and Title eq '"+epf+"' )&$top=5000",
                              type: "GET",
                              dataType: "json",
                              headers: {
                                  Accept: "application/json;odata=verbose"
                              }
                  
                              });
                  
                    call.done(function (data,textStatus, jqXHR){
                          $('#example').dataTable({
                              "bDestroy": true,
                              "bProcessing": true,
                              "aaData": data.d.results,
                              "aLengthMenu" : [
                               [50,100],
                               [50,100]
                              ],
                               dom: 'Bfrtip',
                              buttons: [
                                  'copy', 'csv', 'excel'
                              ],
                  
                              "aoColumnDefs": [{ "bVisible": false  }],
                              "aoColumns": [
                                  { "mData": "ID" },
                                  { "mData": "Title" },
                                  { "mData": "EmployeeName" },
                                  { "mData": "Department1" },
                                  { "mData": "ServicingAt" },
                                  { "mData": "TestField" }, 
                                  { "mData": "BranchCode" },   
                                  { "mData": "Created" ,"render": function (data, type, row) {
                          data = moment(data).format('DD MMM YYYY');
                          return data;
                      }
                  

                  【讨论】:

                    【解决方案18】:

                    解决这个问题的最简单方法

                    像这样稍微修改你的设计

                    //Add this data order attribute to td
                    <td data-order="@item.CreatedOn.ToUnixTimeStamp()">
                                                        @item.CreatedOn
                                                    </td>
                                                    
                                                    
                                   
                                   Add create this Date Time helper function
                    // #region Region 
                     public static long ToUnixTimeStamp(this DateTime dateTime) {
                     TimeSpan timeSpan = (dateTime - new DateTime(1970, 1, 1, 0, 0, 0));
                         return (long)timeSpan.TotalSeconds;
                         } 
                         #endregion

                    【讨论】:

                      【解决方案19】:

                      似乎对我有用的是

                      将使用从我的数据库中的选择查询获取的完整日期时间对象推送到数据集中,该数据集将按数据表格式“2018-01-05 08:45:56”进行绘制

                      然后

                          $('#Table').DataTable({
                              data: dataset,
                              deferRender: 200,
                              destroy: true,
                              scrollY: false,
                              scrollCollapse: true,
                              scroller: true,
                              "order": [[2, "desc"]],
                              'columnDefs': [
                                  {
                                      'targets': 2,
                                      'createdCell':  function (td, cellData, rowData, row, col) {                        
                                          var datestamp = new Date(cellData);
                                          $(td).html(datestamp.getUTCDate() + '-' + (datestamp.getMonth()+1) + '-' + datestamp.getFullYear());
                                      }
                                  }
                              ],
                              "initComplete": function(settings, json) {
                                  $($.fn.dataTable.tables(true)).DataTable()
                                      .columns.adjust();               
                              }
                          });
                      

                      行排序正确,然后我在行中得到我想要的 html

                      【讨论】:

                        【解决方案20】:

                        我发现在这种情况下最简单的排序方法是在 JS 中添加“aaSorting”选项。

                        例如:

                        $(document).ready(function() {
                            $('#contacts-table').dataTable({
                                "aaSorting": [0, 'desc']
                        });
                        

                        这里的问题是,此示例将排序来自第一列的条目,如 STRING,而不是日期。如果源代码允许您将日期格式从 dd/mm/yyyy 更改为 yyyy/mm/dd “aaSorting” 将正常为您工作。

                        【讨论】:

                          【解决方案21】:

                          像这样在&lt;td&gt; 标签上使用data-order 属性(Ruby 示例):

                              <td data order='<%=rentroll.decorate.date%>'><%=rentroll.decorate.date%></td>
                          

                          你的装饰器功能是:

                              def date
                              object.date&.strftime("%d/%m/%Y")
                              end
                          

                          【讨论】:

                            【解决方案22】:

                            如果您从数据库中获取日期并为每一行执行一个 for 循环并将其附加到一个字符串以在 javascript 中使用以自动填充数据表,则它需要看起来像这样。请注意,当使用隐藏跨度技巧时,您需要考虑日期的个位数,例如如果它是第 6 小时,则需要在它之前添加一个零,否则跨度技巧在排序中不起作用。 代码示例:

                             DateTime getDate2 = Convert.ToDateTime(row["date"]);
                             var hour = getDate2.Hour.ToString();
                             if (hour.Length == 1)
                             {
                             hour = "0" + hour;
                             }
                             var minutes = getDate2.Minute.ToString();
                             if (minutes.Length == 1)
                             {
                             minutes = "0" + minutes;
                             }
                             var year = getDate2.Year.ToString();
                             var month = getDate2.Month.ToString();
                             if (month.Length == 1)
                             {
                             month = "0" + month;
                             }
                             var day = getDate2.Day.ToString();
                             if (day.Length == 1)
                             {
                             day = "0" + day;
                             }
                             var dateForSorting = year + month + day + hour + minutes; 
                             dataFromDatabase.Append("<span style=\u0022display:none;\u0022>" + dateForSorting +
                             </span>");
                            

                            【讨论】:

                              【解决方案23】:

                              试试这个:

                              "aoColumns": [
                                      null,
                                      null,
                                      null,
                                      null,
                                      {"sType": "date"},  //  "sType": "date" TO SPECIFY SORTING IS APPLICABLE ON DATE
                                      null
                                    ]
                              

                              【讨论】:

                                【解决方案24】:

                                到您要订购的列保留“sType”:“date-uk” 例如:-"data": "OrderDate", "sType": "date-uk" 在ajax中完成Datatable脚本后保留以下代码

                                 jQuery.extend(jQuery.fn.dataTableExt.oSort, {
                                            "date-uk-pre": function (a) {
                                                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));
                                            }
                                        });
                                

                                然后你会得到日期为 22-10-2018 以这种格式

                                【讨论】:

                                • 你的回答有什么特别之处??
                                • 特殊意义??我认为上面的 cmets 不是那么简短,所以我只是保持直截了当,我在我的机器上测试了该代码后发布了这个答案
                                【解决方案25】:

                                问题来源是日期时间格式。

                                错误样本:“MM-dd-yyyy H:mm”、“MM-dd-yyyy”

                                正确示例:“MM-dd-yyyy HH:mm”

                                【讨论】:

                                  【解决方案26】:

                                  最简单的方法是在该列的每个TD标签的日期前添加一个隐藏的时间戳,例如:

                                  <td class="sorting_1">
                                      <span class="d-none">1547022615</span>09/01/2019  09:30
                                  </td>
                                  

                                  使用默认字符串排序,时间戳会按照您想要的方式对列进行排序,并且在浏览器中呈现时不会显示。

                                  【讨论】:

                                    【解决方案27】:

                                    任何与 UTC 格式或其他人苦苦挣扎的人都可以阅读此内容

                                    假设你有这种格式的日期

                                    2019 年 10 月 15 日星期二 08:41:35 GMT+0000 (UTC)

                                    首先我们可以使用矩将其转换为毫秒

                                    例如,在我的例子中,我使用的是 HandleBar.js。所以我创建了一个 Helper 函数来让它更简单

                                    hbs.registerHelper('dateformat', function (datetime) {
                                    return moment(datetime).valueOf(); })
                                    

                                    否则

                                    这样转换就行了

                                    moment("Tue Oct 15 2019 08:41:35 GMT+0000 (UTC)").valueOf();
                                    

                                    一旦完成,只需将这些值传递给您的表

                                    现在这里的诀窍是将它们都传递并以毫秒为单位隐藏一个并以 UTC 格式显示一个

                                    <td >
                                    <span class="hideThisDate">{{DATA IN MILLISECONDS}}</span> 
                                    {{YOUR DATE IN NORMAL FORMAT}}</td>
                                    

                                    现在只需通过 CSS 以毫秒为单位隐藏它

                                    .hideThisDate {
                                     display:none;
                                     }
                                    

                                    你应该很高兴!

                                    【讨论】:

                                      【解决方案28】:

                                      我在使用 Doctrine 时遇到了同样的问题。我的数据使用orderBy('p.updatedAt', 'DESC')从数据库中正确排序,但是当DataTable处理它们时,最终结果完全不同。

                                      我发现解决此问题的最简单方法是在我的表中添加一个隐藏的列时间戳,然后在按日期排序时按此列排序。完整的functional example 在这里。

                                      <table>
                                        <thead>
                                          <th>Some column<th>
                                          <th>Visible date<th>
                                          <th>Timestamp<th>
                                        </thead>
                                      
                                        <tbody>
                                          <td>Example with Twig</td>
                                          <td>{{ product.updatedAt ? time_diff(product.updatedAt) : '' }}</td>
                                          <td>{{ product.updatedAt ? product.updatedAt.getTimestamp() : '' }}</td>
                                        </tbody>
                                      </table>
                                      
                                      $(document).ready(function() {
                                        let dateColumn = 1;
                                        let timestampColumn = 2;
                                        let currentColumn = timestampColumn;
                                        let currentDirection = "desc";
                                      
                                        let table = $("#dataTable").DataTable({
                                          "order": [
                                              [ timestampColumn, "desc" ],
                                              // If you want to keep the default order from database
                                              // just set "order": [] so DataTable wont define other order
                                          ],
                                          "columnDefs": [
                                            {
                                              "targets": [ timestampColumn ],
                                              "visible": false, // Hide the timestamp column
                                            },
                                          ]
                                        });
                                      
                                        /**
                                         * @var e: Events
                                         * @var settings: DataTable settings
                                         * @var ordArr: Current order used by DataTable
                                         *      example: [{"src":8,"col":8,"dir":"asc","index":0,"type":"string"}]
                                         */
                                        table.on("order.dt", function (e, settings, ordArr) {
                                          currentColumn = ordArr[0].col;
                                          currentDirection = ordArr[0].dir;
                                      
                                          if(currentColumn === dateColumn) {
                                            table.order([timestampColumn, currentDirection]).draw();
                                      
                                            // Without this line you'll get an unexpected behaviour
                                            table.order([dateColumn, currentDirection]); 
                                          }
                                        })
                                      });
                                      
                                      

                                      【讨论】:

                                        猜你喜欢
                                        相关资源
                                        最近更新 更多
                                        热门标签