我有一个自定义日期选择器,使用户可以从淹没中选择日期并将其显示在视图的文本框中。这里使用的格式是'mm / dd / yy'。
当用户提交请求时,我通过AJAX帖子将其传递给控制器。这里的值来自文本框
txtStartTime
和txtEndTime
。 [例如:如果用户选择2016年11月1日,则显示为11/01/16
]
function SubmitData() {
var obj = { TaskId: ccount, TrajName: $('#drpTraj').find(":selected").text(), StartTime: $('#txtStartTime').val(), EndTime: $('#txtEndTime').val(), Aggr: $('#drpAggr').find(":selected").text() }
var jobvm = {}
jobvm["data"] = obj;
$.ajax({
type: "POST",
url: "/Data/SubmitData",
data: JSON.stringify({ dataObj: jobvm }),
contentType: "application/json; charset=utf-8",
dataType: "json",
async: true,
success: function (msg) {
ServiceSucceeded(msg);
},
error: function () {
return "error";
}
});
}
数据类代码:
public int TaskId { get; set; }
public DateTime StartTime { get; set; }
public DateTime EndTime { get; set; }
public string Aggr { get; set; }
public string TrajName { get; set;}
我的问题是,当我选择November 1,2016
之类的日期时,它会显示在视图中并作为11/01/16
传递。但一旦它到达控制器,
日期显示为11 Jan 2016
,而不是01 Nov 2016
。
我尝试了this post中建议的解决方案,如下面的代码:
var dateString = dataObj.StartTime;
var format = "MM/dd/yyyy";
var date = DateTime.ParseExact(dateString, format, CultureInfo.InvariantCulture);
但它没有正确返回日期,因为控制器中收到的数据已经是2016年1月11日。
甚至我试过dataObj.StartTime.ToString("MM-dd-yy")
。但一切都在1月11日回归。
请帮我找到解决方案。
答案 0 :(得分:0)
如何以ISO格式从客户端发送日期以避免服务器猜测日期格式?
var startTimeInClientCulture = '11/01/16'; //$('#txtStartTime').val();
var startTimeInIso = new Date(startTimeInClientCulture);
startTimeInIso.setTime( startTimeInIso.getTime() - startTimeInIso.getTimezoneOffset()*60*1000 );
//use startTimeInIso.toISOString() if you need a string instead of a Date type
//and send this in the ajax call