Kendo UI UTC日期问题

时间:2013-11-11 15:20:28

标签: date datepicker kendo-ui utc

我有一个奇怪的问题,我们网格的编辑模板在编辑日期时会引起问题。

日期以UTC时区存储在服务器上。我使用以下模式设置时区: -

    private DateTime _minDate;
    public DateTime MinDate
    {
        get { return _minDate; }
        set { _minDate = DateTime.SpecifyKind(value, DateTimeKind.Utc); }
    }

使用WebApi OData服务将日期加载到网格中。

{ “Id”:50088,“ProductId”:101437,“Valor”:“12224000”,“ISIN”:“CH0122240002”,“Description”:“Outperformance Bonus Certificate,Multi Shares”,“Provider”:“CSIB”,“ AlertedTicker“:”KO UN“,”ProtectionPercentage“:1.0,”ProtectionType“:”保护丢失“,”UnderlyingCurrency“:”USD“,”BarrierLevel“:190.0,”BarrierPercentage“:70.0,”BarrierType“:”Low“ “BarrierId”:0, “EventStructureId”:170378, “日期”: “2013-11-20T00:00:00Z”, “评论”:空, “确认”:假的, “拒绝”:假的 }

OData服务正确地序列化了UTC日期和日期到达UI的完整。

使用日期选择器控件编辑日期后,只需使用键盘输入,数据就会以错误的格式发送回服务器。

{“odata.metadata”:“http://local.host:51850/web/odata/ $ metadata#PendingBarrierAlerts / @ Element”,“Id”:50088,“ProductId”:101437,“Valor”:“12224000”,“ISIN”:“ CH0122240002“,”描述“:”Outperformance Bonus Certificate,Multi Shares“,”Provider“:”CSIB“,”AlertedTicker“:”KO UN“,”ProtectionPercentage“:1.0,”ProtectionType“:”Protection Lost“,”UnderlyingCurrency “:” USD”, “BarrierLevel”:190.0, “BarrierPercentage”:70.0, “BarrierType”: “低”, “BarrierId”:0 “EventStructureId”:170378, “日期”: “2013-11-20T23:00:00Z”, “评论”:空, “确认”:假的, “拒绝”:假的 }

请注意,日期已更改时间!

如何使用OData作为传输和远程数据源在网格中编辑UTC日期并正确地将它们返回到服务器?

2 个答案:

答案 0 :(得分:1)

日期始终在客户端创建为本地日期(而不是UTC日期)。要拦截并避免结果中发生的事情,您需要使用requestEnd事件在Grid / DataSource开始使用它们之前转换这些日期。

您可以看到涵盖here的类似方法。

答案 1 :(得分:1)

我用什么来避免@PeturSubev所说的是在parse中实现正确初始化日期的DataSource.model函数。

dataSource:{
    ...
    schema:{
        parse:function (response) {
            $.each(response, function (idx, elem) {
                if (elem.Date && typeof elem.Date === "string") {
                    elem.Date = kendo.parseDate(elem.Date, "yyyy-MM-ddTHH:mm:ss.fffZ");
                }
            });
            return response;
        }
    }

}

所以我让KendoUI可以使用他们想要的任何日期。