Показывать только дату и время

В бритве 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.