MVC jquery数据表日期排序问题

时间:2013-05-30 09:16:41

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

我在MVC3 c#中实现了一个数据表。所有在本地开发机器上工作正常,包括DateTime列的排序。

但是,当我将其上传到服务器并访问网页时,数据表排序无法正确排序DateTime列。

进一步测试,我发现不同的浏览器(Chrome和IE9)会产生不同的结果。

使用http://debug.datatables.net/提供的DataTables调试,我发现数据类型显示为字符串类型而不是日期类型。当我使用vs2010在本地开发环境中运行时,调试结果显示为日期类型,可以提供正确的排序。

奇怪的是,我将相同的文件副本上传到服务器,结果却不一样。

Any1遇到这个问题b4?

以下是我的代码:

    <script type="text/javascript" src="@Url.Content("./../Content/Scripts/jquery-1.7.2.min.js")" ></script>
        <script type="text/javascript" src="@Url.Content("./../Content/Scripts/jquery.dataTables.min.js")" ></script>
        <script type="text/javascript" src="@Url.Content("./../Content/Scripts/jquery.jeditable.js")" ></script>
        <script type="text/javascript" src="@Url.Content("./../Content/Scripts/jquery-ui.js")" ></script>
        <script type="text/javascript" src="@Url.Content("./../Content/Scripts/jquery.validate.js")" ></script>
        <script type="text/javascript" src="@Url.Content("./../Content/Scripts/jquery.DataTables.editable.js")" ></script>

        <script language="JavaScript" type="text/javascript">
            $(document).ready(function () {

                jQuery.fn.dataTableExt.oSort['us_date-asc'] = function (a, b) {
                    var x = new Date(a),
                    y = new Date(b);
                    return ((x < y) ? -1 : ((x > y) ? 1 : 0));
                };

                jQuery.fn.dataTableExt.oSort['us_date-desc'] = function (a, b) {
                    var x = new Date(a),
                    y = new Date(b);
                    return ((x < y) ? 1 : ((x > y) ? -1 : 0));
                };

                $('#myDataTable').dataTable({ "bJQueryUI": true,
                    "sPaginationType": "full_numbers",
//                    aaSorting defined the column to be sorted
                    "aaSorting": [[2, "desc"]]
                }).makeEditable({ sUpdateURL: "UpdateData",
                    "aoColumns":
                        [
                        numeric, 
                        string,
                        { "sType": "us_date"},
                        date,
                        string, 
                        string

                        ]
                });
            })

    </script>

2 个答案:

答案 0 :(得分:0)

如果您的输入字符串始终为mm/dd/yyyy格式,您应该只使用现有的datetime_us排序选项。 Reference here

如果您想要更多控制权,可以使用列出on the same page列出的其他选项之一,或考虑使用moment.js

// moment lets you specify the input format to parse
var x = moment(a, "MM/DD/YYYY HH:mm:ss"),
    y = moment(b, "MM/DD/YYYY HH:mm:ss");

// same as before
return ((x < y) ? -1 : ((x > y) ? 1 : 0));

答案 1 :(得分:0)

我尝试了datetime-us方法,问题仍然存在。

我仍然无法弄清楚为什么javascript Date()不能识别我的服务器中的C#DateTime格式,但它确实在我的本地开发环境中。

我的问题的解决方案是使用显式更改DateTime格式 .ToString(“yyyy-MM-ddTHH:mm:ss”)然后一切正确排序。

马特约翰逊,你的答复虽然如此。