我正在尝试将DateTime加载到KendoUI DatetimePicker。但它显示像/日期(1381964400000)/。我需要得到它像10/17/2013
这是我的代码
日期时间选择器:
@(Html.Kendo().DatePicker().Name("invDate")
用于加载控制日期时间的脚本
$("#invLoad").click(function (e) {
$.ajax({
url: "@Url.Content("Invoice/ItemHeaderByTrnKy")",
data: { trnNo: $('#trnNo').val() },
dataType: "Json",
type: "POST",
success: function (data) {
if (data != null) {
$("#invDate").val(data.TrnDt);
}
else {
ClearAll();
}
},
error: function (e) {
ClearAll();
}
});
答案 0 :(得分:1)
第一个选项是尝试将字符串解析为JavaScript Date
对象,然后将该对象传递给kendoDatePicker
小部件:
success: function (data) {
if (data) {
var dateval = parseInt(data.TrnDt.src.replace(/\/Date\((\d+)\)\//, "$1"));
if (!isNaN(dateval)) {
var d = new Date(dateval);
$("#invDate").data("kendoDatePicker").value(d);
} else {
ClearAll();
}
},
步骤:
data.TrnDt.src.replace(/\/Date\((\d+)\)\//, "$1")
从字符串中提取数值并解析为整数。Date
对象Date
对象传递给kendoDatePicker
的{{1}}功能。虽然这种方法很有效,但结果可能并不完全符合您的预期。 .NET JSON编码可能会产生本地时间偏移,而value()
构造函数需要一个值作为UTC偏移量,然后转换为本地时间。因此,根据服务器的时区和客户端的时区,您的输出将偏移数小时。
在我的客户端上,解析您提供的日期值会得到Date()
的结果。这告诉我你可能正在其中一个GMT + 0100时区中运行。
解决这个问题的唯一可靠方法是第二个选项:将所有Date值作为可由Thu Oct 17 2013 09:00:00 GMT+1000
构造函数解释的字符串返回。
如果您在服务器上将日期值格式化为Date()
并将结果字符串传递给dd MMM yyyy
,那么您将获得预期的日期值。如果您只是通过ASP控制器中的new Date()
返回一个对象,最简单的方法是向您的对象添加一个转换属性:
return Json(result);
然后您的代码变为:
public string strTrnDt { get { return TrnDt.ToString("dd MMM yyyy"); } }
甚至更简单:
success: function (data) {
if (data) {
var d = new Date(data.strTrnDt);
$("#invDate").data("kendoDatePicker").value(d);
} else {
ClearAll();
}
},