web-dev-qa-db-ja.com

asp.net MVCラッパーを使用してKendo UIグリッドでDateTimeをフォーマットする

日付dd // MM/yyyyの形式でKendo UIグリッドを構築したい。ただし、これについて私が見つけたすべての質問は、コードFormat( "{0:d}");で解決されました。だから、私は以下のコードのように試しました:

GridBoundColumnBuilder<TModel> builder = par.Bound(field.Name);

        switch (field.Type.Type)
        {
            case CType.Boolean:
                builder = builder.ClientTemplate(string.Format("<input type='checkbox' #= {0} ? checked='checked' : '' # disabled='disabled' ></input>", field.Name));
                break;
            case CType.Datetime:
                builder = builder.Format("{0:d}");
                break;
            case CType.Decimal:
            case CType.Double:
                builder = builder.Format("{0:0.00}");
                break;
        }

別の形式は正常に動作しますが、DateTimeは動作しません。

Datetime =/Date(1377020142000)/についてこの結果がありました

29
leodeoliveira

日時形式を剣道グリッドに表示する場合は、これを行います。

.Format("{0:dd/MM/yyyy}") 

または

builder.ToString("dd/MM/yyyy");
73
Jaimin
.Format("{0:" + System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern + "}");

System.Globalization.CultureInfo.CurrentCulture.DateTimeFormatには、他のオプションが必要な場合に機能する可能性があります。

13
Bryan Hobbs

他の解決策は近かったが、葉巻はなかった...私のために働いたものは次のとおりです。

columns.Bound(c => c.CreatedDate).ClientTemplate("#= kendo.toString(kendo.parseDate(CreatedDate), 'dd/MM/yyyy') #");
13
user1477388

以下も使用できます:

columns.Bound(c => c.DateCreate).Format("{0:G}")

http://docs.telerik.com/kendo-ui/framework/globalization/dateformatting のように

8
piris

代わりにこれを試してください、これは動作します。

.ClientTemplate("#= kendo.toString(kendo.parseDate(Date,'dd/MM/yyyy'), '" +  CurrentDateFormat + "') #");
4
Milan

コアの問題は本当によく文書化されています こちら 。そこにある答えと私が見つけた他のものとを組み合わせて、プロジェクトで機能させるために必要なことを以下に示します。

C#コードで:

.Template("#= kendo.toString(parseDate(" + field.Name + "), 'dd/MM/yyyy') #");

次に、javascript関数を作成します。

function parseDate(d) {
  d = new Date(parseInt(d.replace(/\/Date\((-?\d+)\)\//gi, "$1"), 10));
  return d;
}

それは少し手掛かりですが、動作します。

1
JebaDaHut

Kendo UIについては知りませんが、DateTimeオブジェクトではなく文字列形式の日付を渡したいようです。

/Date(...)/出力は、.NetからのJSON形式の日付のように見えます。

コントロールに渡す前に、myDateTime.ToString("dd/MM/yyyy");のようなものを使用して日付を文字列に変換します。

1
Void

ご回答ありがとうございます。

ClientTemplateを使用してjavascript関数を呼び出し、Kendoグリッド列のHH:MM:SSで期間を秒単位でフォーマットします。

                .ClientTemplate("#= secToHHMMSS(DurationInSeconds) # ")
                    .Title("Duration")
                    .Width(150);
function secToHHMMSS(s) {
    f = Math.floor;
    g = (n) => ('00' + n).slice(-2);
    return f(s / 3600) + ':' + g(f(s / 60) % 60) + ':' + g(s % 60)
}
0
Ephie