Показывать только дату и время
В бритве MVC я помещаю текущую дату в базу данных, как это.
model.Returndate = DateTime.Now.Date.ToShortDateString();
Поскольку поле базы данных является типом данных datetime, и я преобразовываю текущую дату в формат строки, это не работает. Как я могу это сделать? Я делаю строковый формат, потому что мне нужна дата в формате mm/dd/yyyy, а не в формате mm/dd/yyyy hh: mm: ss time..
EDIT:
В контроллере у меня есть
var model = new ViewModel();
model.ReturnDate = DateTime.Now;
return PartialView("PartialView", model);
В частичном представлении у меня есть
@Html.EditorFor(model => model.Returndate)
Здесь отображается дата даты и времени вместе... Я хочу только дату, которая будет отображаться. Не время. Я надеюсь, что это редактирование лучше объясняет.
Ответы
Ответ 1
Если тип столбца - DateTime в SQL, тогда он будет хранить время, когда вы передаете один или нет.
Лучше правильно сохранить дату:
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)
EDIT:
Привет, ребята, просто хочу пояснить для этого ответа, что, сказав: "Если вы используете EditorFor", это означает, что вам нужно иметь шаблон EditorFor для типа значения, которое вы пытаетесь представить.
Шаблоны редактора - это классный способ управления повторяющимися элементами управления в MVC:
http://coding-in.net/asp-net-mvc-3-how-to-use-editortemplates/
Вы можете использовать их для наивных типов, таких как String, как я сделал выше; но они особенно хороши для того, чтобы позволить вам создать набор полей ввода для более сложного типа данных.
Ответ 2
Мне просто пришлось самому справиться с этим сценарием - нашёл действительно простой способ сделать это, просто добавьте в свой комментарий следующее свойство:
[DataType(DataType.Date)]
public DateTime? SomeDateProperty { get; set; }
Он также скроет кнопку времени с помощью выбора даты.
Извините, если этот ответ немного запоздал;)
Ответ 3
Это работает, если вы хотите отображать в текстовом поле:
@Html.TextBoxFor(m => m.Employee.DOB, "{0:dd-MM-yyyy}")
Ответ 4
Дата/время в дате не будет отформатированной версией. Это будет только дата/время. Как вы показываете эту дату/время, когда вы извлекаете значение из базы данных, это другое дело. Я сильно подозреваю, что вы просто хотите:
model.Returndate = DateTime.Now.Date;
или, возможно,
model.Returndate = DateTime.UtcNow.Date;
Да, если вы посмотрите на базу данных с помощью SQL Server Studio или что-то еще, вы увидите полночь - но это не имеет значения, и когда вы выберете дату из базы данных и отобразите ее пользователю, тогда вы можете применить соответствующий формат.
EDIT: в отношении вашего отредактированного вопроса проблема заключается не в модели, а в том, как вы указываете представление. Вы должны использовать что-то вроде:
@Html.EditorFor(model => model.Returndate.Date.ToString("d"))
где d
является стандартным спецификатором формата даты и времени для шаблона короткой даты (что означает, что он будет иметь текущие культурные настройки).
Этот бит, который я уже неоднократно повторял, - когда вы показываете дату/время для пользователя, это время, чтобы отформатировать его как дату без времени.
EDIT: Если это не сработает, должен быть способ декорирования модели или представления с помощью строки формата - или что-то в этом роде. Я на самом деле не человек MVC, но кажется, что должен быть хороший способ сделать это декларативно...
Ответ 5
Вы можете изменить свою ViewModel, как показано ниже:
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}",ApplyFormatInEditMode = true)]
Ответ 6
С помощью ToString
можно использовать пользовательский формат времени даты:
DateTime.Now.Date.ToString("MM/dd/yyyy");
Дальнейшее чтение в формате DateTime.ToString
форматов можно найти здесь и здесь.
Изменить: После редактирования вопроса. Как и то, что другие предложили, вы должны применить формат даты в своем представлении:
model.Returndate = DateTime.Now.Date;
@Html.EditorFor(model => model.Returndate.Date.ToString("MM/dd/yyyy"))
Ответ 7
Я не уверен в Razor, но в ASPX вы делаете:
<%if (item.Modify_Date != null)
{%>
<%=Html.Encode(String.Format("{0:D}", item.Modify_Date))%>
<%} %>
В Razor должно быть что-то похожее. Надеюсь, это поможет кому-то.
Ответ 8
Если у вас есть цикл 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>
Ответ 9
Вы можете просто преобразовать дату и время. Что-то вроде:
@Convert.ToString(string.Format("{0:dd/MM/yyyy}", Model.Returndate))
Ответ 10
У меня были некоторые проблемы с другими решениями на этой странице, поэтому я решил оставить это.
@Html.TextBoxFor(m => m.EndDate, "{0:d}", new { @class = "form-control datepicker" })
Так что вам нужно только добавить "{0: d}" во второй параметр, и вам будет хорошо идти.
Ответ 11
[Display(Name = "Bill Date")] [DataType(DataType.Date)] [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)] public DateTime BillDate { get; set; }
Теперь ваша дата Билла покажет как.
![enter image description here]()
Ответ 12
use model.ReturnDate.ToShortDateString(); It will return only the date part.