Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 在Datatables.net中按日期列排序_Asp.net_Sorting_Date_Datatables - Fatal编程技术网

Asp.net 在Datatables.net中按日期列排序

Asp.net 在Datatables.net中按日期列排序,asp.net,sorting,date,datatables,Asp.net,Sorting,Date,Datatables,我似乎无法正确地对日期列进行排序。我一直在用这个作为参考。我将asp.net与母版页一起使用 我将按以下顺序包括: <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.4/moment.min.js"></script> <script type="text/javascript" src="<%=ResolveUrl("~/Asset

我似乎无法正确地对日期列进行排序。我一直在用这个作为参考。我将asp.net与母版页一起使用

我将按以下顺序包括:

<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.4/moment.min.js"></script>
<script type="text/javascript" src="<%=ResolveUrl("~/Assets/js/plugins/jquery.dataTables.min.js")%>"></script>
<script type="text/javascript" src="https://cdn.datatables.net/plug-ins/1.10.20/sorting/datetime-moment.js"></script>
此外,在母版页上,我有以下代码:

            $(document).ready(function () {
                    console.log(moment('Dec 1 2019 12:00AM', 'MMM d YYYY hh:mma').isValid()); //validates to true
                    $.fn.dataTable.moment('MMM d YYYY hh:mma');
                });
}

最后,我认为需要的最后一个功能。我尝试在$(document.ready)和$之外添加这个,结果相同。我添加了一些日志,它将在加载datatable时打印test1和test2,但在表格式化之后,它不会创建任何日志,我尝试对列进行排序

$.fn.dataTable.moment = function (format, locale) {
                    console.log("test1");
                    var types = $.fn.dataTable.ext.type;

                    // Add type detection
                    types.detect.unshift(function (d) {
                        console.log("test2");
                        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) {
                        console.log("test3");
                        return moment(d, format, locale, true).unix();
                    };
                };
以下是我试图排序的表格中的一些日期:2019年12月1日12:00AM,2020年1月2日3:58AM,2023年1月1日11:59PM


在此方面的任何帮助都将不胜感激。

我在上面的评论中采纳了VDWWD的建议。我更新后用我的数据返回隐藏的跨度,而不是使用MomentJS,这给了我很多问题

首先,我创建了一个接收可为空datetime的函数:

public static string createDateColumnSpan(DateTime? date)
    {
        //if there is a date, format it
        if(date != null)
        {
            return "<span class='d-none'>" + Convert.ToDateTime(date).ToString("yyyyMMddHHmm") + "</span>";
        }
        //else return empty string
        else
        {
            return "";
        }
    }

在此之后,在客户端使用datatables.net对列进行了正确排序

I只需使用正确的排序格式在列中添加一个隐藏的
yyyymmdd
。那总是管用的很抱歉我上周没有回答你。我在我的c#中尝试了这个实现,它似乎解决了我的问题。本周我将不得不做一些进一步的测试,如果一切顺利,我将提交我的答案,并说明我到底做了什么。谢谢你的帮助。
public static string createDateColumnSpan(DateTime? date)
    {
        //if there is a date, format it
        if(date != null)
        {
            return "<span class='d-none'>" + Convert.ToDateTime(date).ToString("yyyyMMddHHmm") + "</span>";
        }
        //else return empty string
        else
        {
            return "";
        }
    }
//get a list of events
var eventList = (from e in db.Events orderby e.DueDate select new
                {
                    e.ID,
                    e.DueDate
                }).AsEnumerable().Select(x => new
                {
                    x.ID,
                    DueDate = createDateColumnSpan(x.DueDate) + x.DueDate.ToString(),
                });