【问题标题】:Converting DateTime format using razor使用剃刀转换日期时间格式
【发布时间】:2011-06-08 10:31:43
【问题描述】:

以下有什么问题?

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

@item.Date 显示 20/11/2005 12:00 a.m,我想显示 2011 年 11 月 20 日

【问题讨论】:

标签: asp.net-mvc-3 razor


【解决方案1】:

试试:

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

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

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

在你看来很简单:

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

【讨论】:

  • 我用一个文本框试过这个,不幸的是它没有用。有没有办法为文本框做到这一点?
  • 对于文本框只需使用 EditorFor 而不是 DisplayFor
  • 如果您希望将日期格式应用于 EditorFor() 元素,请记住在 DisplayFormat 定义中设置“ApplyFormatInEditMode = true”。
  • 我需要将它用于 DateTime 字段才能使用内置日期选择器。如果没有 DisplayFormat 注释,浏览器中的 javascript 控制台会显示类似“指定的值 '1/1/1990 12:00:00 AM' 不符合所需的格式,'yyyy-MM-dd'”。在我的 MVC 视图中使用 EditorFor 时,我必须同时设置 DataFormatString 并将 ApplyFormatInEditMode 设置为 true 以使错误消失并正确显示该值。
  • 这对我有用,但我不知道 - 我觉得我违反了关注点分离,因为我通过属性应用逻辑来格式化模型中的日期(表示关注点)。我知道这是 Microsoft 期望它工作的方式,但似乎数据显示格式应该与视图隔离,模型应该只是一个模型。
【解决方案2】:

这是解决方案:

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

ToString() 之前使用 Value

【讨论】:

  • 这段代码是正确的,但是如果日期列为空,这会抛出错误,所以试试this
  • Stom 是正确的,如果你有空值会抛出错误,感谢链接
  • 正是我想要的
  • Null 异常可以通过使用 null 合并运算符 - @(item.DOB?.ToString("dd-MMM-yyyy")) 来处理。或者通过使用 HasValue 属性 - @(item.DataDate.HasValue ? item.DataDate.Value.Date.ToString("dd MMM yyyy") : null)。在这两种情况下,属性都必须是可为空的日期时间。
【解决方案3】:

在 MVC 4.0 中试试这个

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

【讨论】:

  • 我不知道为什么有人会否决这个答案。
  • 我认为不赞成票是由于此解决方案将日期格式化为“dd/MM/yyyy”而不是 OP 要求的“dd MMM yyyy”格式
  • 这个应该是选择的答案。我尝试了其他的,但都没有奏效。谢谢。
【解决方案4】:

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

输出: 2011 年 12 月 30 日

相关链接:

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

【讨论】:

  • 或者,您也可以使用@string.Format("{0:MM yyyy}", imprint.VersionDate)
【解决方案5】:

下面的代码会帮助你

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

【讨论】:

    【解决方案6】:

    对于 Razor,将文件 DateTime.cshtml 放在 Views/Shared/EditorTemplates 文件夹中。 DateTime.cshtml 包含两行并生成一个日期格式为 2001 年 9 月 11 日的文本框。

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

    【讨论】:

    • 谢谢...无法让其他人工作。 C#/ Razor 是否对简单的日期格式进行了如此多的工作进行了如此大的更改?互联网上建议最多的答案: ....ToString("dd MMM yyyy") 从来没有为我工作过,我总是把它塞进一个变量中,将它转换成日期,然后输出日期。我知道必须有一个班轮在某个地方工作。
    • 安东尼·格里格斯,我觉得你好。很高兴分担痛苦,这样我们都可能在 --6½ 年后获得收益!
    【解决方案7】:

    一般来说,书写的月份转义为 MMM,4 位数的年份转义为 yyyy,因此您的格式字符串应类似于“dd MMM yyyy”

    DateTime.ToString("dd MMM yyyy")
    

    【讨论】:

    • @ViewBag.PurchaseInfo.LastPurchaseTime.ToString("dd.MM.yyyy")
    【解决方案8】:

    我无法完全根据上述建议完成这项工作。包括 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

    【讨论】:

      【解决方案9】:

      对于所有给定的解决方案,当您在现代浏览器(如 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) 将渲染(输入的 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>
      

      浏览器会显示

      要解决此问题,您需要将 type 更改为 text 而不是 date(如果您想使用自定义日历也可以)

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

      【讨论】:

        【解决方案10】:

        根据上面的 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>
                    }
                }
        

        【讨论】:

          【解决方案11】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-08-20
            • 1970-01-01
            • 1970-01-01
            • 2020-06-30
            • 1970-01-01
            相关资源
            最近更新 更多