web-dev-qa-db-ja.com

カミソリを使用したDateTime形式の変換

次の何が問題になっていますか?

@Convert.ToDateTime((@item.Date.ToShortDateString())," dd - M - yy")

@ item.Dateは20/11/2005 12:00 a.mを表示しており、2011年11月20日を表示したい

87
learning

試してください:

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

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

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

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

@Html.DisplayFor(x => x.Date)
246
Darin Dimitrov

これが解決策です。

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

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

66
Miroslav Holec

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

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

[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

18
Diganta Kumar

以下のコードが役立ちます

@Html.Label(@item.Date.Value.ToString("dd - M - yy"))
6
Anjan Kant

Razorの場合、DateTime.cshtmlファイルをViews/Shared/EditorTemplatesフォルダーに配置します。 DateTime.cshtmlには2行が含まれ、2001年9月11日にフォーマットされた日付のTextBoxを生成します。

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

上記の提案に完全に基づいてこれを機能させることはできませんでした。 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

2
Fraze

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

DateTime.ToString("dd MMM yyyy")
2
flq

与えられたすべてのソリューションについて、最新のブラウザー(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)wil render(入力のtypeは、モデルの日付設定に基づいてdateに設定されます!)

<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>

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

enter image description here

これを修正するには、日付の代わりにtypetextに変更する必要があります(カスタムカレンダーを使用する場合も)

@Html.EditorFor(model => model.Start, "{0:dd-MM-yyyy}", new { htmlAttributes = new { @class = "form-control", @type = "text" } })
1
Bunkerbuster