仅显示日期,没有时间

时间:2011-08-19 16:12:30

标签: c# asp.net-mvc asp.net-mvc-3 datetime

在MVC剃须刀中,我将这样的当前日期放在数据库中..

model.Returndate = DateTime.Now.Date.ToShortDateString();

由于数据库字段是datetime数据类型,并且我将当前日期转换为字符串格式,这不起作用..我该怎么做?我正在做字符串格式,因为我希望日期为mm / dd / yyyy格式而不是mm / dd / yyyy hh:mm:ss时间格式..

编辑:

在控制器中我有

var model = new ViewModel();
model.ReturnDate = DateTime.Now;            
return PartialView("PartialView", model);  

在部分视图中,我有

@Html.EditorFor(model => model.Returndate)

这是将日期显示为日期和时间的地方......我只想显示日期。不是时候。我希望这个编辑更好地解释。

11 个答案:

答案 0 :(得分:120)

我必须自己处理这个场景 - 找到一个非常简单的方法来做到这一点,只需在模型中注释你的属性就像这样:

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

它也会隐藏日期选择器中的时间按钮。

对不起,如果这个答案有点晚了;)

答案 1 :(得分:94)

如果列类型是SQL中的DateTime,那么它将存储您传递或不传递的时间。

最好妥善保存日期:

model.ReturnDate = DateTime.Now;

然后在需要显示时格式化它:

@Html.Label(Model.ReturnDate.ToShortDateString())

或者如果您使用的是EditorFor:

@Html.EditorFor(model => model.ReturnDate.ToShortDateString())

@Html.EditorFor(model => model.ReturnDate.ToString("MM/dd/yyyy"))

要向模型添加属性,请添加以下代码:

public string ReturnDateForDisplay
{
    get
    {
       return this.ReturnDate.ToString("d");
    }
}

然后在PartialView中:

@Html.EditorFor(model => model.ReturnDateForDisplay)

编辑:

大家好,只想澄清一下这个答案我的说法'如果你正在使用EditorFor',那就意味着你需要为你想要代表的值类型设置一个EditorFor模板。

编辑器模板是管理MVC中重复控件的一种很酷的方法:

http://coding-in.net/asp-net-mvc-3-how-to-use-editortemplates/

你可以将它们用于像String这样的天真类型,就像我上面所做的那样;但是它们特别适合让你为更复杂的数据类型模拟一组输入字段。

答案 2 :(得分:38)

如果要在TextBox中显示,则此方法有效:

@Html.TextBoxFor(m => m.Employee.DOB, "{0:dd-MM-yyyy}")

答案 3 :(得分:15)

日期基准中的日期/时间根本不是格式化的版本。它只是日期/时间本身。从数据库中提取值时,显示的日期/时间是另一回事。我强烈怀疑你真的只是想要:

model.Returndate = DateTime.Now.Date;

或可能

model.Returndate = DateTime.UtcNow.Date;

是的,如果您使用SQL Server Studio或其他任何内容查看数据库,您现在将看到午夜 - 但这是无关紧要的,当您从数据库中取出日期并将其显示给用户时,然后您可以应用相关格式。

编辑:关于您编辑的问题,问题不在于模型 - 它是您指定视图的方式。你应该使用类似的东西:

@Html.EditorFor(model => model.Returndate.Date.ToString("d"))

其中d是短日期模式的standard date and time format specifier(这意味着它会考虑当前的文化设置)。

这就是我一再说过的话 - 当你向用户显示日期/时间时,就是把它格式化为没有时间的日期的时候。

编辑:如果这不起作用,应该有一种方法用格式字符串来装饰模型或视图 - 或类似的东西。我不是一个真正的MVC人,但感觉就像应该是一个以声明方式做这个的好方法......

答案 4 :(得分:8)

您可以按如下方式修改ViewModel:

[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}",ApplyFormatInEditMode = true)]

答案 5 :(得分:7)

您可以使用ToString来应用自定义日期时间格式,例如:

DateTime.Now.Date.ToString("MM/dd/yyyy");

可以找到DateTime.ToString格式模式的进一步阅读herehere

编辑:在您的问题编辑之后,就像其他建议您应该在您的视图中应用日期格式一样:

model.Returndate = DateTime.Now.Date;

@Html.EditorFor(model => model.Returndate.Date.ToString("MM/dd/yyyy"))

答案 6 :(得分:4)

我在Razor中不确定,但在ASPX中你确实如此:

 <%if (item.Modify_Date != null)
  {%>
     <%=Html.Encode(String.Format("{0:D}", item.Modify_Date))%>     
<%} %>

Razor必须有类似的东西。希望这会对某人有所帮助。

答案 7 :(得分:2)

如果你有一个for循环,如下面的那个。

将@ item.StartDate更改为 @ item.StartDate.Value.ToShortDateString()

如果您不能像我的情况那样在模型中注释您的财产,这将删除时间。

<table>
  <tr>
   <th>Type</th>
   <th>Start Date</th>
  </tr>
    @foreach (var item in Model.TestList) {
      <tr>
        <td>@item.TypeName</td>
        <td>@item.StartDate.Value.ToShortDateString()</td>
      </tr>
      }
</table>

答案 8 :(得分:2)

[Display(Name = "Bill Date")] [DataType(DataType.Date)] [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)] public DateTime BillDate { get; set; }

现在,您的帐单日期将显示为。

enter image description here

答案 9 :(得分:1)

您可以简单地转换日期时间。类似的东西:

@Convert.ToString(string.Format("{0:dd/MM/yyyy}", Model.Returndate))

答案 10 :(得分:1)

此页面上的其他解决方案存在一些问题,因此以为我可以解决这个问题。

@Html.TextBoxFor(m => m.EndDate, "{0:d}", new { @class = "form-control datepicker" })

因此,您只需在第二个参数中添加“ {0:d}”,就可以了。