Snicklefritz
Snicklefritz

Reputation: 355

How to format dates in MVC 5 Razor

I have a table in my razor code that loops through all of the items in the model and creates a table row for each item. I'm trying to figure out how to format the date to MM/dd/yyyy instead of the default "MM/dd/yyyy HH:mm:ss" format.

<table class="table-condensed">
    <thead>
        <tr>
            <th>Company</th>
            <th>Contract No</th>
            <th>Description</th>
            <th>Expires</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model)
        {
            <tr>
                <td>@Html.ActionLink(@item.CompanyName, "ViewContract", new { contractID = @item.ID }) </td>
                <td width="200">@item.ContractNumber</td>
                <td>@item.Description</td>
                <td>@item.ExpireDate</td>
            </tr>
            }
    </tbody>    
</table>

I have tried @item.ExpireDate.ToString("MM/dd/yyyy") but it throws an error saying that .ToString does not take an argument.

Upvotes: 5

Views: 15701

Answers (3)

joey8oro
joey8oro

Reputation: 97

You can also now use

@item.ExpireDate?.ToShortDateString() which converts a DateTime value to the "M/d/yyyy" date format

Upvotes: 0

jimSampica
jimSampica

Reputation: 12410

If you're using c# 6 features you can use a null-conditional.

@(item.ExpireDate?.ToString("MM/dd/yyyy"))

Upvotes: 10

Snicklefritz
Snicklefritz

Reputation: 355

I am using the PagedList NuGet package which makes the Html helper calls a little different. I was able to format the date by specifying the date format in the data model constructor and then using the display helper.

In the data model:

[DisplayFormat(DataFormatString = "{0: MM/dd/yyyy}")] 
public Nullable<System.DateTime> ExpireDate { get; set; }

In the razor:

<table class="table-condensed">
    <thead>
        <tr>
            <th>Company</th>
            <th>Contract No</th>
            <th>Description</th>
            <th>Expires</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model)
        {
            <tr>
                <td>@Html.ActionLink(@item.CompanyName, "ViewContract", new { contractID = @item.ID }) </td>
                <td width="200">@item.ContractNumber</td>
                <td>@item.Description</td>
                <td>@Html.DisplayFor(modelItem => item.ExpireDate)<td>
            </tr>
            }
    </tbody>     </table>

Upvotes: 4

Related Questions