18

I have problem in regarding with converting the datetime to date using a model.

Model from Class Library

public partial class LoanContract
{
    [DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
    public DateTime LoanDateStart { get; set; }
}

Model from Project

public class ModelLoan
{
    public LoanContract loanContract { get; set; }
}

Code in controller

 myList.loanContract = new LoanContract { LoanDateStart = DateTime.Today };

View:

<input disabled type="date" asp-for="loanContract.LoanDateStart" id="dpDateNow" class="form-control" />

It show like this: yyyy-MM-dd what I want to achieve is that I want to change it to MM/dd/yyyy. I tried using .ToString("MM/dd/yyyy") but it doesn't work.

Tseng
  • 57,187
  • 13
  • 181
  • 194
Alvin Quezon
  • 961
  • 3
  • 9
  • 25
  • 2
    Please do not force tags into title. Read on [how to use tags](http://stackoverflow.com/help/tagging) for future questions. Also please make sure to use correct tags in future. [tag:asp.net] and [tag:asp.net-mvc] are **incorrect** tags for ASP.NET Core related topics. Please use [tag:asp.net-core] and [tag:asp.net-core-mvc] in future otherwise you may receive unrelated answers for the old ASP.NET instead of ASP.NET Core – Tseng May 03 '17 at 11:00
  • I will take note of that. – Alvin Quezon May 04 '17 at 00:37
  • None of the below mentioned answers and comments worked for me in asp.net core 5 – Snziv Gupta Aug 10 '21 at 10:35

9 Answers9

28

Thank you @Enrico for your comment i add it in the answer :

Try it with this in your model:

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

And In your controller change DateTime to Date :

myList.loanContract = new LoanContract { LoanDateStart = Date.Today };

Hope this help you.

Francois Borgies
  • 2,340
  • 30
  • 38
9

Simple and practical, use asp-format, example:

<input asp-for="MyDate" asp-format="{0:dd/MM/yyyy}" class="form-control" />

Or:

@Html.TextBoxFor(model => model.MyDate, "{0:dd/MM/yyyy}", new { @class = "form-control" })
Matheus Miranda
  • 1,649
  • 2
  • 18
  • 34
6

If when defining in model does not work, you can use inside your view file:

@String.Format("{0:dd/MM/yyyy}",ViewBag.TerminoDaAvaliacao)

This ViewBag contains a DateTime value. The time disapears with this format definition. It is not necessary to change DateTime by Date inside the Model file definition.

4

This might be the wrong solution to the problem being asked, but I hope it helps someone. If you are trying to input only a date (without time) Model.IsValid will throw back a validation error saying the date input format is incorrect. To solve this problem, simply Add this to your model.

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

Using data attributes inside asp.net have the benefit of automatically being supported by jQuery client-side validation. (Generated by Asp.Net)

Sludgedog
  • 103
  • 7
3

I have also solved this problem using .ToString("d"). I received output of "MM/DD/YYYY".

Stephen Kennedy
  • 18,869
  • 22
  • 90
  • 106
2

I think it is a bug for dateformat escape chars on dotnet core. None of above solutions worked for me. Only this method solved my problem. why does DateTime.ToString("dd/MM/yyyy") give me dd-MM-yyyy?

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

or

<input asp-for="DateProperty" asp-format="{0:dd'/'MM'/'yyyy}">
twister
  • 302
  • 4
  • 9
1

Add [DataType(DataType.Date)] in your model

[Column(TypeName = "Date")]
[DisplayName("Date of birth")]
[DataType(DataType.Date)] 
Wasiim
  • 9
  • 1
0

For those who get here wanting to change date format of a model in the view regardless of Model class (Its what I expected to be answering). This works in both Razorpages and MVC.

Just add .ToString("dd/MM/YYYY") to the property you're displaying.

e.g.

@Model.DateOfBirth.ToString("<Use formatting here>")

This is great if you only want to show part of a date say month and year, but elsewhere you need to show the day and the time.

Mark Perry
  • 1,793
  • 2
  • 15
  • 25
0

This might be extremely helpful sometimes,

<input asp-for="DateProperty" asp-format="**@Model.DateProperty.ToString($"{0:dd/MM/yyyy}")**">
atiyar
  • 6,953
  • 6
  • 33
  • 67
Niranjan
  • 1
  • 2