0

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

2 回答 2

0

如果您的输入字符串始终采用mm/dd/yyyy格式,您可能应该只使用现有的datetime_us排序选项。 参考这里

如果您想要更多控制,可以使用同一页面上列出的其他选项之一,或考虑使用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));
于 2013-05-30T18:32:05.740 回答
0

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

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

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

马特约翰逊,谢谢你的回复。

于 2013-05-31T05:33:52.597 回答