只显示日期,不显示时间
Posted
技术标签:
【中文标题】只显示日期,不显示时间【英文标题】:Display only date and no time 【发布时间】:2011-10-30 18:23:41 【问题描述】:在 MVC razor 中,我像这样将当前日期放入数据库中..
model.Returndate = DateTime.Now.Date.ToShortDateString();
由于数据库字段是日期时间数据类型,并且我正在将当前日期转换为字符串格式,所以这不起作用.. 我该怎么做?我正在使用字符串格式,因为我想要 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)
这是将日期显示为日期和时间的地方...我只想显示日期。不是时候。我希望这个编辑能更好地解释。
【问题讨论】:
不用担心 00:00:00(午夜)。只需格式化输出ToString("mm/dd/yyyy");
即可准确查看您想要的内容。
将数据库中的数据保存为DateTime
。您在 OUTPUT 上进行字符串格式化...仅将其格式化为最终查看器。
【参考方案1】:
只需自己处理这种情况 - 找到了一种非常简单的方法,只需像这样在模型中注释您的属性:
[DataType(DataType.Date)]
public DateTime? SomeDateProperty get; set;
它也会从日期选择器中隐藏时间按钮。
对不起,如果这个答案有点晚了;)
【讨论】:
非常感谢。这对我很有帮助! +1 正是我所需要的。太棒了! 我最近有一个位置,当输入类型是日期时,chrome 会在其中放入有趣的东西,我认为是 html5 的一部分,我想改用 jquery datepicker,所以我选择了 DataType.Text - 这仍然允许我使用足够酷的格式 不必为迟到而道歉,发布老问题的答案对于非 OP 的人来说是一个很大的帮助。这是我一直在寻找的答案,因为我知道这是可能的,但不记得如何了,你在 3 年前发布了它。如果有的话,你来得太早了。 如果日期来自数据库,我不知道这有什么帮助......无法弄清楚【参考方案2】:如果 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 这样的幼稚类型;但它们特别适合让您为更复杂的数据类型模板化一组输入字段。
【讨论】:
不确定谁反对这个.. 但我没有使用 HTML.label 来显示这个.. 我正在使用 HTML.EditorFor(model => model.Returndate) 如何格式化显示这个案子…… 这只是如何格式化结果的示例;我会更新我的答案。 我认为如果该值逻辑上只是一个日期,那么也值得只存储日期部分,即使无论如何时间都会被剥离。 @Russ:您所做的更新编辑器不起作用。它给了我一个错误“模板只能用于字段访问、属性访问、单维数组索引或单参数自定义索引器表达式。” 你应该从答案中删除 '@Html.EditorFor(model => model.ReturnDate.ToShortDateString())' 因为这不起作用。【参考方案3】:如果你想在 TextBox 中显示,这很有效:
@Html.TextBoxFor(m => m.Employee.DOB, "0:dd-MM-yyyy")
【讨论】:
如果浏览器在设置中的格式与“dd-MM-yyyy”不同,即“MM-dd-yyyy”,日期将显示不正确【参考方案4】:日期库中的日期/时间根本不是格式化 版本。它只是日期/时间本身。从数据库中提取值时如何显示该日期/时间是另一回事。我强烈怀疑你真的只是想要:
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 人,但感觉 应该 是一种以声明方式执行此操作的好方法...
【讨论】:
DateTime.Now.Date 仍然显示时间和日期。 @ZVenue:显示在哪里?您应该存储 DateTime 值,并在显示 日期的任何位置使用仅日期格式说明符。您给出的代码(在模型中设置属性)大概是用于存储的,所以它有一个午夜的时间并不重要。 Jon 建议我在说什么,将日期保存到 SQL 中;然后,您可以在打印时适当地格式化您的日期。 @Jon:当我将您的编辑代码用于 html.editorfor... 时出现此错误。“模板只能用于字段访问、属性访问、单维数组索引或单参数自定义索引器表达式"....在运行时 @ZVenue:也看看这个:***.com/questions/5033902/…【参考方案5】:您可以如下修改您的 ViewModel:
[DisplayFormat(DataFormatString = "0:dd/MM/yyyy",ApplyFormatInEditMode = true)]
【讨论】:
这个方案也解决了Chrome的datepicker冲突问题。如果您只是在 Viewmodel 中指定 Datatype.Date,Chrome 会在文本框中使用自己的 datepicker 版本。谢谢!【参考方案6】:您可以使用ToString
应用自定义日期时间格式,例如:
DateTime.Now.Date.ToString("MM/dd/yyyy");
关于DateTime.ToString
格式模式的进一步阅读可以找到here 和here。
编辑:编辑问题后,就像其他建议一样,您应该在视图中应用日期格式:
model.Returndate = DateTime.Now.Date;
@Html.EditorFor(model => model.Returndate.Date.ToString("MM/dd/yyyy"))
【讨论】:
这无助于保存日期的问题。 他不能通过调用model.Returndate.ToString("mm/dd/yyyy")
来保存它吗?
那是个问题。我将该值放在数据库中的日期时间字段中。所以这不起作用..请参阅我的原始帖子。
不应该是.ToString("MM/dd/yyyy")吗? mm 是分钟,而不是月!
@Bodrich:谢谢,更新了,不过我只是复制粘贴他的模式。【参考方案7】:
如果你有一个如下的 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】:在 Razor 中我不确定,但在 ASPX 中你可以:
<%if (item.Modify_Date != null)
%>
<%=Html.Encode(String.Format("0:D", item.Modify_Date))%>
<% %>
Razor 中一定有类似的东西。希望这会对某人有所帮助。
【讨论】:
是的,这也适用于 Razor 语法,例如@Html.Encode(string.Format("0:D", item.Modify_Date))【参考方案9】:包括 DisplayFormat 和 ApplyFormatInEditMode 等数据注释以获得所需的输出。
[Display(Name = "Bill Date")]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "0:dd/MM/yyyy", ApplyFormatInEditMode = true)]
public DateTime BillDate get; set;
现在您的账单日期将显示为。
【讨论】:
请查看其他答案。您认为您的帖子是否有必要并在帖子中添加了一些新的优质内容?【参考方案10】:您可以简单地转换日期时间。比如:
@Convert.ToString(string.Format("0:dd/MM/yyyy", Model.Returndate))
【讨论】:
谢谢@ANJYR,这个对我有用。我正在为 DateTime 字段使用 PickADay 库。也许这就是为什么任何其他提议的解决方案都适用于我的案例。【参考方案11】:我在使用此页面上的其他解决方案时遇到了一些问题,所以我想将其放入。
@Html.TextBoxFor(m => m.EndDate, "0:d", new @class = "form-control datepicker" )
所以你只需要在第二个参数中添加“0:d”就可以了。
【讨论】:
以上是关于只显示日期,不显示时间的主要内容,如果未能解决你的问题,请参考以下文章
数据库中数据类型为datatime时,如何只显示日期或者只显示时间,不一起显示行不,需要涉及到程序吗?求解