使用剃须刀转换DateTime格式


Answers:


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
我尝试了一个文本框,但不幸的是它没有用。有没有办法对文本框执行此操作?
Tobias

2
对于文本框,只需使用EditorFor而不是DisplayFor
Brandon シ Renfrow

10
如果希望将日期格式应用于EditorFor()元素,请记住在DisplayFormat定义中设置“ ApplyFormatInEditMode = true”。
Latedeveloper 2011年

1
我需要将其用于DateTime字段,以便使用内置的日期选择器。没有DisplayFormat批注,浏览器中的javascript控制台将显示类似“指定的值'1/1/1990 12:00:00 AM'不符合要求的格式'yyyy-MM-dd'”。我必须同时设置DataFormatString和将ApplyFormatInEditMode设置为true,以消除错误并在MVC视图中使用EditorFor时正确显示该值。
Mark

这对我有用,但是我不知道-我感到自己通过应用逻辑通过属性格式化模型中的日期(表示关注点)违反了关注点分离。我知道这是Microsoft期望的工作方式,但是似乎数据显示格式应该与视图隔离,并且模型应该只是模型。
barrypicker

73

这是解决方案:

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

ToString()使用Value之前。


1
此代码是正确的,但是如果date
列为

Stom是正确的,如果您使用null值将引发错误,感谢链接
Nick Kahn

我一直在寻找
Roger Tello

空异常可以通过使用空合并运算符-来处理@(item.DOB?.ToString("dd-MMM-yyyy"))。或通过使用HasValue属性- @(item.DataDate.HasValue ? item.DataDate.Value.Date.ToString("dd MMM yyyy") : null)。在这两种情况下,属性都必须为可为null的日期时间。
quasar

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年

我认为下注是由于此解决方案将日期格式设置为“ dd / MM / yyyy”,而不是OP要求的“ dd MMM yyyy”格式
PTD 2015年

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/zh-CN/library/system.componentmodel.dataannotations.displayformatattribute.applyformatineditmode.aspx


1
或者,您也可以使用@ string.Format(“ {0:MM yyyy}”,imprint.VersionDate)
Diganta Kumar

8

下面的代码将帮助您

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

4

对于Razor,将文件DateTime.cshtml放在Views / Shared / EditorTemplates文件夹中。DateTime.cshtml包含两行,并生成日期格式为9/11/2001的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½年后获得收益!
朱尔斯·巴托

3

通常,写入的月份以MMM形式转义,而4位数的年份是yyyy,因此格式字符串应类似于“ dd MMM yyyy”

DateTime.ToString("dd MMM yyyy")

@ ViewBag.PurchaseInfo.LastPurchaseTime.ToString(“ dd.MM.yyyy”)
yonexbat 2013年

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)

高温超导


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" } })
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.