2013-09-23 10 views
6

私の剣道グリッドでは、サーバーから日時を受け取っています。クライアント側では、この時間はクライアントのタイムゾーンに変更され、表示されます。サーバーからクライアントに同じ時刻を表示するにはどうすればよいですか。剣道グリッド自動変更タイムゾーン

以下は、datetimeをバインドするための私の剣道コードです。

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

答えて

3

これは私がこのようにやったコントローラ上の私の解決策

DateTime time = DateTime.Now();

文字列x = time.ToString( "MM/dd/yyyy hh:mm:ss tt");

ビュー

columns.Bound(P => p.x)。

ソート可能です。

+2

この場合、日付ピッカーコントロールによるフィルタリングは機能しません。 –

+2

'columns.Bound(p => p.x);'を意味しましたか? – ataravati

5

日付は、サーバーからの応答が返され、クライアント上で作成されているので - 日付が常にオフセット

これはあなたを助けるブラウザのタイムゾーンに応じて作成されます。

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

+0

これは、すべてのシナリオに適したソリューションこのシナリオで結構ですが、ではない、あなたが店にUTCに変更したときに、私は1970年1月1日または1970年12月31日架空の出生フィールドの日付を持って言うことができますそれは日付を変更し、UTCで再度検索することも機能しません。剣道には修正/回避策がないのだろうか? – HaBo

+0

@HaBo回避策を見つけたことがありますか? – Pugz

0

別のオプションは、というカスタムを使用して、日付を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)); 
     } 
    } 

その後IsoDateJsonResultの代わりActionResult/JsonResultを返すために、あなたのController方法を変更します。

0

私の場合、サーバーはCSTにあり、私はMSTにいます。 SQL Serverのデータをブラウザに残す必要があり、02/08/18 23:57を02/08/18 22:57に私の剣道グリッドで取得していました。だから私はこれをしなかった、それが役に立てば幸い:

小切手ユーザー/ブラウザのタイムゾーンは

を相殺サーバーのタイムゾーンからの時間の違いを取得します

をオフセットクラス.dbDate

と剣道グリッド上の列に見えます

データオブジェクトからそのセル内の日付(displayedTime)を取得します。

Moment.jsを使用して、渡した時間の差(diff)に基づいて変換します(convertedTime)。所望のフォーマットへ

フォーマットconvertedTimeすなわち02/08/18 23時57

ようにオブジェクト内の次の日付が

を調整しますIに1を追加し、更新日時をグリッドに戻ります。

最後にページ/グリッドの読み込み/更新を実行する必要があります。

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) 
    }) 
} 
関連する問題