2013-07-17 45 views
7

我们正在观察以下与我们的MVC应用程序和Kendo DatePicker之间的时差有关的问题。 Web服务器以UTC + 0运行。 Web客户端运行在不同的时区(UTC + 1,UTC + 3,UTC-5等)Kendo MVC Datepicker时区翻译

该网页包含一个Kendo日期选择器(没有时间部分),用户选择一天或一天月。幕后使用包含时间和时区信息的完整Date对象通过AJAX请求发送日期。

我们只对日期部分感兴趣,而不考虑客户端所在的时区。当用户选择日期/月份时,我们希望在本地服务器时间内接收C# DateTime对象。

例如:

用户是UTC + 1,并选择01/07/2013' 实际的C#DateTime对象实例化作为'30/06/2013 23:00' 我们希望得到'01/07/2013 00:00:00'

目前,我们正在使用以下设置在Global.asax中:

GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.DateTimeZoneHandliig = Newtonsoft.Json.DateTimeZoneHandling.Local; 

能否请指教?

回答

0

问题是转换得到JavaScript日期和C#日期时间之间的所有链接。我所做的是在将日期发布到服务器之前将其转换为字符串。你可以钩入Kendo DataSource的parameterMap函数来做到这一点。

使用parameterMap功能:

var ds = new kendo.data.DataSource({ 
    transport: { 
    parameterMap: function(data, type) { 
     if (type === 'create' || type === 'update') { 
     // this changes the date to 'dd/MM/YYYY' format 
     data.date = kendo.toString(data.date, 'd'); 
     } 
     return data; 
    } 
    } 
}); 

我还设置了JsonFormatter.SerializerSettings.DateFormatString = "YYYY/dd/MM hh:mm:ss"因为JavaScript可以将它转换为Date对象没有错误或其他wonkiness。我还建议将您的DateTimeZoneHandling更改为UTC。你不需要时区偏移量,是吗?

在控制器的服务器端,可以使用DateTime.Parse()或让编译器隐式执行转换。