我在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>
答案 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”)然后一切正确排序。
马特约翰逊,你的答复虽然如此。