以下代码部署到azure:
的javascript:
var _dp;
$(function () {
kendo.culture("en-GB");
_dp = $("#modified").kendoDatePicker().data("kendoDatePicker");
});
function postData() {
var data = {
Modified: _dp.value()
};
$.ajax({
type: "POST",
data: JSON.stringify(data),
contentType: 'application/json',
url: "/location/edit",
success: function (response) {
log(response.modifedLocalDateTime);
log(response.modifiedLocalKind);
log(response.modifiedUtcDateTime);
log(response.modifiedUtcKind);
}
});
}
function log(msg) {
document.getElementById('divLog').innerHTML += "<br/>" + msg;
}
我的HTML是
<input type="text" id="modified" />
<a href="javascript:postData();">postData</a>
<div id="divLog"></div>
我的mvc控制器是
[HttpPost]
public ActionResult Edit(LocationViewModel item)
{
var modifiedUtc = item.Modified;
var modifiedLocal = modifiedUtc.ToLocalTime();
return Json(new
{
modifedLocalDateTime = modifiedLocal.ToString(),
modifiedLocalKind = modifiedLocal.Kind.ToString(),
modifiedUtcDateTime = modifiedUtc.ToString(),
modifiedUtcKind = modifiedUtc.Kind.ToString()
});
}
public class LocationViewModel
{
public int LocationId { get; set; }
public string Name { get; set; }
public DateTime Modified { get; set; }
}
还值得指出我的webapi.config:
config.Formatters.JsonFormatter.SerializerSettings.DateFormatHandling = DateFormatHandling.IsoDateFormat;
config.Formatters.JsonFormatter.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Utc;
现在我使用剑道日期选择器选择一个日期,例如2015年5月29日,然后点击发布数据。我得到的回报是提前1小时我所要求的。不是我所期待的。我的地区是英国,所以我们在英国的夏季时间是UTC + 1.
所以我期待将日期转换为UTC - 看着小提琴,这似乎是这样:
所以Web api应该以utc格式接收日期。然而,看看输出,web api,于2015年5月28日23:00收到,该类型属性设置为本地?为什么kind属性设置为utc - 我期望的那样,就像在我的webapi.config中我指定了UTC ...那么为什么会这样?
我目前得到的是这个
我想要的是在我的行动方法中收到2015年5月29日而不是2015年5月28日23:00。
我该怎么做?
答案 0 :(得分:0)
您将Zulu time zone(即UTC)传递给服务器,没有任何偏移。服务器正在将其转换为自己的时区。所以你可以用两种方式解决问题:
对于第二个选项,您可以使用ISO格式,如下所示:
2015-05-17T13:32:00 // YYYY-MM-DD hh:mm:ss.ddddd
此格式始终按预期解释,并且由于未指定时区,因此日期将保留在服务器中。
您可以使用moment.js来操作日期,然后再将它们发送回服务器。