2013-07-17 49 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()或讓編譯器隱式執行轉換。