使用razor转换DateTime格式

时间:2011-01-13 11:05:43

标签: asp.net-mvc-3 razor

以下是什么问题?

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

@ item.Date正在显示2005年11月20日上午12点,我希望显示2011年11月20日

11 个答案:

答案 0 :(得分:245)

尝试:

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

或者您可以在视图模型上使用[DisplayFormat]属性:

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

在您看来简单:

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

答案 1 :(得分:66)

这是解决方案:

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

ToString()之前,使用

答案 2 :(得分:26)

在MVC 4.0中试试这个

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

答案 3 :(得分:18)

[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

答案 4 :(得分:6)

以下代码可以帮助您

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

答案 5 :(得分: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" })

答案 6 :(得分:2)

一般情况下,写入的月份作为MMM进行转义,因为你的格式字符串看起来像“dd MMM yyyy”

DateTime.ToString("dd MMM yyyy")

答案 7 :(得分:2)

根据上述建议,我无法完全使此工作正常进行。包括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

答案 8 :(得分:0)

对于所有给定的解决方案,当您在现代浏览器(如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渲染(输入的类型根据您模型中的日期设置设置为日期!)

<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

要解决此问题,您需要将类型更改为文字而不是日期(如果您想使用自定义日历,也需要更改

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

答案 9 :(得分:0)

根据 Anjan Kant 上面所说的,这就是我想出的(本来可以给你一个赞,但我太新了)

@if (Model.Quotes != null)
        {
            foreach (var item in Model.Quotes)
            {
                <tr class="code-black">
                    <td class="td">
                        @Html.Label(@item.CreateDate.ToShortDateString())
                    </td>
                    <td class="td">
                        @Html.DisplayFor(modelItem => item.Status)
                    </td>
                    <td class="td">
                        @Html.DisplayFor(modelItem => item.ProjectName)
                    </td>
                    <td class="td usd">
                        @Html.DisplayFor(modelItem => item.Total)
                    </td>
                    <td class="td">
                        <a asp-page="../Quote/Details" asp-route- 
                                        id="@item.Id">View</a> 
                    </td>
                </tr>
            }
        }

答案 10 :(得分:0)

更改日期类型的简单方法,即:

   [DataType(DataType.Date)]
   public DateTime? DataEurGbp { get; set; }