2013-07-17 11 views
7

Stiamo osservando il seguente problema relativo alle differenze di orario tra la nostra app MVC e un Kendo DatePicker. Il server Web è in esecuzione in UTC + 0. I client Web sono in esecuzione in diversi fusi orari (UTC + 1, UTC + 3, UTC-5, ecc.)Kendo MVC Datepicker traduzione fuso orario

La pagina Web contiene un selettore di date Kendo (nessuna porzione di tempo) in cui l'utente seleziona un singolo giorno o un mese. Dietro le quinte La data viene inviata in una richiesta AJAX utilizzando oggetti Data completi che contengono le informazioni sull'ora e sul fuso orario.

Siamo interessati solo alla parte della data indipendentemente dal fuso orario in cui si trova il client. Quando un utente seleziona una data/mese, si desidera ricevere un oggetto DateTime C# nell'ora del server locale.

Ad esempio:

utente è in UTC + 1 e sceglie '01/07/2013' L'oggetto C# DateTime effettivo viene istanziato come '30/06/2013 23:00' Ci aspettiamo di ottenere '01/07/2013 00:00:00'

attualmente stiamo utilizzando la seguente impostazione in Global.asax:

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

Potete trasmettere?

risposta

0

Il problema è che la conversione viene avviata tra JavaScript Date e C# DateTime. Quello che faccio è convertire la data in una stringa prima di essere inviata al server. È possibile collegare la funzione parameterMap di Kendo DataSource per farlo.

Usando la funzione 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; 
    } 
    } 
}); 

Ho anche impostare il JsonFormatter.SerializerSettings.DateFormatString = "YYYY/dd/MM hh:mm:ss" perché JavaScript in grado di convertire questo per un oggetto Date senza errori o altro Wonkiness. Vorrei anche raccomandare di cambiare il DateTimeZoneHandling in UTC. Non hai bisogno dell'offset del fuso orario, vero?

Sul lato server del controller, è possibile utilizzare DateTime.Parse() o consentire al compilatore di effettuare la conversione implicitamente.