かみそりを使用してDateTime形式を変換する


回答:


264

試してください:

@item.Date.ToString("dd MMM yyyy")

または[DisplayFormat]、ビューモデルの属性を使用できます。

[DisplayFormat(DataFormatString = "{0:dd MMM yyyy}")]
public DateTime Date { get; set }

そしてあなたの見解では単に:

@Html.DisplayFor(x => x.Date)

3
私はこれをテキストボックスで試しましたが、残念ながらうまくいきませんでした。テキストボックスに対してこれを行う方法はありますか?
トビアス

2
テキストボックスの場合は、DisplayForの代わりにEditorForを使用してください
ブランドンRen Renfrow

10
EditorFor()要素に日付フォーマットを適用する場合は、DisplayFormat定義で「ApplyFormatInEditMode = true」を設定することを忘れないでください。
後期開発者2010年

1
組み込みの日付ピッカーを使用するには、DateTimeフィールドにこれを使用する必要がありました。DisplayFormatアノテーションがないと、ブラウザのJavaScriptコンソールに「指定された値 '1/1/1990 12:00:00 AM'は必要なフォーマット 'yyyy-MM-dd'に準拠していません」のように表示されます。MVCビューでEditorForを使用するときにエラーを解消し、値を適切に表示するには、DataFormatStringとApplyFormatInEditModeの両方をtrueに設定する必要がありました。
マーク

これは私にとってはうまくいきますが、私は知りません。属性を介してモデルの日付(プレゼンテーションの懸念)をフォーマットするロジックを適用することで、懸念の分離に違反しているような気がします。これはMicrosoftがこのように機能することを期待している方法だと理解していますが、データ表示フォーマットをビューに分離し、モデルをモデルにするだけのようです。
バリーピッカー

73

これが解決策です:

@item.Published.Value.ToString("dd. MM. yyyy")

ToString()の前にValueを使用します。


1
このコードは正しいですが、日付列がnullの場合、このエラーがスローされますので、試してくださいこれを
shaijut

Stomは正しいです。null値があるとエラーがスローされます。リンクをありがとう
Nick Kahn

ちょうど私が探していたもの
Roger Tello

null例外は、null結合演算子-を使用して処理できます@(item.DOB?.ToString("dd-MMM-yyyy"))。またはHasValueプロパティを使用する- @(item.DataDate.HasValue ? item.DataDate.Value.Date.ToString("dd MMM yyyy") : null)。どちらの場合も、プロパティはnull可能な日付/時刻でなければなりません。
クエーサー、

31

MVC 4.0でこれを試してください

@Html.TextBoxFor(m => m.YourDate, "{0:dd/MM/yyyy}", new { @class = "datefield form-control", @placeholder = "Enter start date..." })

2
なぜ誰がこの回答に反対票を投じるのか、私にはわかりません。
Mikayil Abdullayev、2015

反対票は、OPが要求した "dd MMM yyyy"形式ではなく "dd / MM / yyyy"として日付をフォーマットするこのソリューションによるものであったと思います
PTD

1
これが選ばれた答えです。他の人を試しましたが、どれもうまくいきませんでした。どうも。
ビクターリー

20

[DisplayFormat]属性はEditorFor / DisplayForでのみ使用され、TextBoxForなどの生のHTML APIでは使用されません。私はそれを次のようにしてうまくいきました、

モデル:

[Display(Name = "When was that document issued ?")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:d}")]
public DateTime? LiquorLicenceDocumentIssueDate { get; set; }

見る:

        <div id="IsLiquorLicenceDocumentOnPremisesYes" class="groupLongLabel">
            @Html.LabelFor(m => m.LiquorLicenceDocumentIssueDate)
            <span class="indicator"></span>
            @Html.EditorFor(m => m.LiquorLicenceDocumentIssueDate)
            <span id="validEmail"></span>
            <br />
            @Html.ValidationMessageFor(m => m.LiquorLicenceDocumentIssueDate)
        </div>

出力:30/12/2011

関連リンク:

http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.displayformatattribute.applyformatineditmode.aspx


1
または、@ string.Format( "{0:MM yyyy}"、imprint.VersionDate)を使用することもできます
Diganta Kumar


4

Razorの場合、ViewTimes / Shared / EditorTemplatesフォルダーにファイルDateTime.cshtmlを置きます。DateTime.cshtmlには2行が含まれており、2001年9月11日形式の日付を持つTextBoxを生成します。

@model DateTime?
@Html.TextBox("", (Model.HasValue ? Model.Value.ToShortDateString() : string.Empty), new { @class = "datePicker" })

1
ありがとう...他の誰も働かせることができませんでした。C#/ Razorは、単純な日付形式が機能するために非常に多くのことを行わなければならないところまで、それほど変更しましたか?インターネットで最も提案されている答え:.... ToString( "dd MMM yyyy")は私には役に立たず、常に変数に詰め込んで日付に変換してから日付を出力していました。どこかで機能するワンライナーが必要だと知っていました。
Anthony Griggs

アンソニー・グリッグス、私はそう感じます。痛みを分かち合えたのはうれしいです。そうすれば、私たち全員が--6½年後に利益を得られるでしょう。
Jules Bartow

3

通常、書かれた月はMMMとしてエスケープされ、4桁の年はyyyyとしてエスケープされるため、フォーマット文字列は「dd MMM yyyy」のようになります。

DateTime.ToString("dd MMM yyyy")

@ ViewBag.PurchaseInfo.LastPurchaseTime.ToString( "dd.MM.yyyy")
yonexbat

3

上記の提案に基づいてこれを完全に機能させることはできませんでした。DataTypeAttributeを含める[DataType(DataType.Date)]ことで問題が解決したようです。以下を参照してください。

型番

[Required]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
public DateTime RptDate { get; set; }

見る

@Html.EditorFor(m => m.CLPosts.RptDate)

HTH


1

与えられたすべてのソリューションについて、これを最新のブラウザ(FFなど)で試して、正しいモデルを設定した場合

// Model
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}", ApplyFormatInEditMode = true)]
public DateTime Start { get; set; }

// View
<div class="form-group">
    @Html.LabelFor(model => model.Start, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.EditorFor(model => model.Start, "{0:dd-MM-yyyy}", new { htmlAttributes = new { @class = "form-control"} })
    </div>
</div>

MVC(5)(レンダリングウィルタイプ入力のに設定された日付モデル内のあなたの日付設定に基づきました!)

<div class="col-md-10">
<input class="form-control text-box single-line" data-val="true" data-val-date="The field Start must be a date." data-val-required="The Start field is required." id="Start" name="Start" value="01-05-2018" type="date">
        <span class="field-validation-valid text-danger" data-valmsg-for="Start" data-valmsg-replace="true"></span>
</div>

そして、ブラウザが表示されます

ここに画像の説明を入力してください

これを修正するには、タイプを日付ではなくテキストに変更する必要があります(カスタムカレンダーを使用する場合も同様)。

@Html.EditorFor(model => model.Start, "{0:dd-MM-yyyy}", new { htmlAttributes = new { @class = "form-control", @type = "text" } })
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.