ASP.NET MVC Core date only format is not working using DataAnnotation

nam picture nam · Jul 27, 2017 · Viewed 7.9k times · Source

Following viewmodel used in a view is supposed to display a StartDate as, say 9/30/2015. But it is displaying as 9/30/2015 12:00:00 AM. How can I make it display without time while using DataAnnotaion? I know I can use @Model.StartDate.ToString("MM/dd/yyy") inside view to display date only. But that would mean you have to do it in every view that is using the following ViewModel:

ViewModel:

...
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
public DateTime StartDate { get; set; }
...

UPDATE

The corresponding model class of the above ViewModel already has the following DataAnnotation that correctly creates the data type in SQL Server table as Date; and when you run a query on the corresponding table in SSMS it correctly displays the StartDate column's data with dates only, say, 9/30/2015 etc.)

Model

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

StartDate in the sql db is in fact Date only. Moreover, if I run a query on SSMS it correctly returns date only.

Answer

Erik Funkenbusch picture Erik Funkenbusch · Jul 28, 2017

There are two solutions to your problem. As per your comments, you are currently using @Model.StartDate to display a date.

You can either do this:

@Model.StartDate.ToString("d")

Or, you can use a model based approach in your ViewModel and do this:

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

Then, in your view use:

@Html.DisplayFor(m => m.StartDate)