JQuery DataTable英国日期排序不起作用

时间:2014-09-24 09:49:22

标签: jquery asp.net-mvc sorting jquery-datatables

用这个把我的头靠在墙上。正如问题标题所示,我在MVC Razor View中有一个JQuery Datatable。其中一列显示英国日期(年/月/日),我想根据它的英国日期对该列进行排序。

我的Razor View中有以下内容

<script type="text/javascript" charset="utf-8">
        $(document).ready(function () {

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


            $('#example').dataTable({
                stateSave: true,
                "aoColumnDefs" : [
                       {"aTargets" : [1] , "sType" : "uk_date"}
                    ]
            });


        });
</script>

<table cellpadding="0" cellspacing="0" border="1" class="cdates" id="example">
    <thead>
    <tr>
        <th>Name</th>
        <th>Date</th>    
        <th>Status</th>
        <th>Applicants</th>   
    </tr>
    </thead>
    <tbody>
        @foreach (var cd in Model)
        {
            <tr>
            <td><strong>@cd.CourseName</strong></td>
            <td>@cd.CourseDate</td>
            <td>@cd.CourseStatus</td>
            <td>@Html.ActionLink("View Applicants", "CDApps", "Portfolio", new { @id = @cd.CourseDateID, @CourseID=@cd.CourseID }, null)</td>
            </tr>             
        }
    </tbody>
</table>

但我的日期排序仍然不起作用。我已经查看了Stack Overflow上的其他类似问题,但我仍然无法使其工作。

有谁能请我指出正确的方向。

感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

试试这个:将sType值从uk_date替换为date-uk,就像您使用的排序函数"date-uk-pre""date-uk-asc""date-uk-desc"一样

$('#example').dataTable({
      stateSave: true,
      "aoColumnDefs" : [
           {"aTargets" : [1], "sType" : "date-uk"}
         ]
    });

并且您的日期列的时间包含在日期值中,这会导致排序问题。

有以下两种解决方案

1)对sort函数进行更改以排除时间因素

"date-uk-pre": function (a) { 
            var ukDatea = a.split('/');
            var yearWithoutTimeValue = ukDatea[2].split(" ")[0];
            return (yearWithoutTimeValue  + ukDatea[1] + ukDatea[0]) * 1;
  },

<强> Demo

2)从表列值中删除时间,如

<tr>
   <td><strong>Electroconvulsive Therapy (ECT) (3 days)</strong></td>
   <td>01/05/2014</td>
   <td></td>
   <td><a href="/Portfolio/CDApps/15454?CourseID=51">View Applicants</a></td>
</tr> 

<强> DEMO