【问题标题】:MVC jquery datatable date sorting issueMVC jquery数据表日期排序问题
【发布时间】:2013-05-30 09:16:41
【问题描述】:

我在 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>

【问题讨论】:

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


    【解决方案1】:

    如果您的输入字符串始终采用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));
    

    【讨论】:

      【解决方案2】:

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

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

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

      Matt Johnson,谢谢您的回复。

      【讨论】:

        猜你喜欢
        • 2016-12-11
        • 2015-03-03
        • 2012-08-13
        • 2017-07-22
        • 2017-11-11
        • 1970-01-01
        • 2020-05-23
        • 1970-01-01
        相关资源
        最近更新 更多