在mvc中将Json日期传递给操作方法

在mvc中将Json日期传递给操作方法,json,asp.net-mvc,asp.net-web-api,Json,Asp.net Mvc,Asp.net Web Api,以下代码已部署到azure: javascript: var _dp; $(function () { kendo.culture("en-GB"); _dp = $("#modified").kendoDatePicker().data("kendoDatePicker"); }); function postData() { var data = { Modified: _dp.val

以下代码已部署到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;
    }
还值得指出的是,我的webapi.config中有:

        config.Formatters.JsonFormatter.SerializerSettings.DateFormatHandling = DateFormatHandling.IsoDateFormat;
        config.Formatters.JsonFormatter.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Utc;
现在,我使用剑道日期选择器选择一个日期,比如说2015年5月29日,然后单击post数据。我得到的比我要求的早一个小时。不完全是我所期望的。我所在的地区是英国,所以我们在英国的夏季时间UTC+1

因此,我期望日期被转换为UTC-看看fiddler,这似乎是这样的:

因此,Web api应该接收utc格式的日期。然而,看看输出,web api,收到2015年5月28日23:00,种类属性设置为本地?为什么kind属性设置为utc(我希望如此),就像我在webapi.config中指定的utc。。。为什么会这样

我现在得到的是这个

在我的行动方法中,我想要的是2015年5月29日,而不是2015年5月28日23:00


如何执行此操作?

您正在向服务器传递UTC,没有任何偏移。服务器正在将其转换为自己的时区。因此,您可以通过两种方式解决问题:

  • 更正客户端,使其向服务器发送正确的偏移量
  • 从客户端发送不带偏移的日期,以便它不会对其进行任何更改
对于第二个选项,可以使用ISO格式,如下所示:

2015-05-17T13:32:00 // YYYY-MM-DD hh:mm:ss.ddddd
此格式始终按预期进行解释,并且由于没有指定时区,因此日期保留在服务器中


在将日期发送回服务器之前,您可以使用moment.js来处理日期。

据我所知,通过任何类型的Web服务发送日期都将转换为服务器时区。因此,我会将日期作为字符串发送回服务器
        config.Formatters.JsonFormatter.SerializerSettings.DateFormatHandling = DateFormatHandling.IsoDateFormat;
        config.Formatters.JsonFormatter.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Utc;
2015-05-17T13:32:00 // YYYY-MM-DD hh:mm:ss.ddddd