2013-09-23 8 views
6

Sulla mia griglia Kendo ricevo ora dal server. Alla fine del client, questa volta viene modificato nel fuso orario del cliente e viene visualizzato. Come posso mostrare lo stesso tempo dal server al client.Griglia Kendo Modifica automatica Fuso orario

il seguente è il mio codice di kendo per l'associazione del datetime.

columns.Bound(p => p.CreateDate).Format("{0:dd/MM/yyyy hh:mm:ss}").Sortable(true).Width(180); 

risposta

3

questa era la mia soluzione

sul controller ho fatto come questo

DateTime time = DateTime.Now();

string x = time.ToString ("MM/gg/aaaa hh: mm: ss tt");

Su Vista

columns.Bound (p => p.x);

È anche ordinabile.

+2

Ricorda che in questo caso il filtraggio con il controllo di selezione data non funzionerà comunque. –

+2

Intendevi 'columns.Bound (p => p.x);'? – ataravati

5

Dal momento che le date vengono creati sul client quando viene restituita la risposta dal server - le date sono sempre creati con un offset in base al fuso orario del browser

questo vi aiuterà a:

http://www.kendoui.com/code-library/mvc/grid/using-utc-time-on-both-client-and-server-sides.aspx

+0

Questo va bene in questo scenario, ma non è una soluzione giusta per tutti gli scenari, Diciamo che ho un campo Data di nascita 1/1/1970 ipotetica o 1970/12/31 quando si cambia in UTC a negozio cambierà la data e il recupero di nuovo in UTC non funzionerà. Mi chiedo se Kendo non abbia una soluzione/soluzione su questo. – HaBo

+0

@HaBo hai mai trovato una soluzione alternativa? – Pugz

0

Un'altra opzione è l'uso di JsonResult personalizzato e la conversione nel formato ISO.

public class IsoDateJsonResult : JsonResult 
{ 
    public override void ExecuteResult(ControllerContext context) 
    { 
     if (context == null) 
     { 
      throw new ArgumentNullException("context"); 
     } 

     HttpResponseBase response = context.HttpContext.Response; 

     if (!String.IsNullOrEmpty(ContentType)) 
     { 
      response.ContentType = ContentType; 
     } 
     else 
     { 
      response.ContentType = "application/json"; 
     } 
     if (ContentEncoding != null) 
     { 
      response.ContentEncoding = ContentEncoding; 
     } 
     if (Data != null) 
     { 
      var isoConvert = new IsoDateTimeConverter(); 
      response.Write(JsonConvert.SerializeObject(Data, isoConvert)); 
     } 
    } 

quindi modificare il metodo di Controller per restituire IsoDateJsonResult invece di ActionResult/JsonResult.

0

Nel mio caso il server è in CST e sono in MST. Avevo bisogno di mantenere i miei dati SQL Server sul browser e ricevevo il 02/08/18 alle 23:57 il 02/08/18 alle 22:57 sul mio Kendo Grid. Così ho fatto questo, spero che aiuta:

compensato

Controlli/fuso orario dell'utente Browser

Gets differenza di ore da fuso orario del server di offset

guarda una colonna di Kendo griglia con classe .dbDate

Afferra la data in quella cella (visualizzataTempo) dall'oggetto dati

Utilizza Moment.js per convertire (convertito in tempo reale) in base alla differenza (diff) in ore passate.

Formati convertedTime al formato desiderato cioè 02/08/18 23:57

Aggiungere 1 a i in modo che la prossima data in oggetto viene regolata

passa la griglia indietro la data e l'ora aggiornata.

Deve essere eseguito per ultimo nella pagina/caricamento della griglia/aggiornamento.

function getDateOffset() { 
    var date = new Date(); 
    var offset; 
    var diff; 
    offset = date.getTimezoneOffset() 
    if (offset > 360) { //360 = CST 
     diff = +(offset - 360)/60 
    } else if (offset < 360) { 
     diff = -(360 - offset)/60 
    } else { 
     diff = 0 
    } 

    $(".dbDate").each(function (i) { 

     var grid = $('#Grid').data('kendoGrid'); 
     var displayedTime = grid.dataSource.data()[i].TicketDateTime 
     var convertedTime = new moment(displayedTime).add(diff, 'hours').toDate(); 
     var originalTime = moment(convertedTime).format("MM/DD/YY HH:mm"); 

     i + 1 
     $(this).html(originalTime) 
    }) 
}