Перетворення формату DateTime за допомогою бритви


104

Що не так у наступному?

@Convert.ToDateTime((@item.Date.ToShortDateString())," dd - M - yy")

@ item.Date відображається 20/11/2005 12:00, і я хочу показати 20 листопада 2011


1
Комбінації різних специфікаторів формату дати, які ви можете знайти тут: msdn.microsoft.com/en-us/library/8kb3ddd4.aspx
Джозеф Вудвард

Відповіді:


264

Спробуйте:

@item.Date.ToString("dd MMM yyyy")

або ви можете використовувати [DisplayFormat]атрибут у моделі перегляду:

[DisplayFormat(DataFormatString = "{0:dd MMM yyyy}")]
public DateTime Date { get; set }

а на ваш погляд просто:

@Html.DisplayFor(x => x.Date)

3
Я спробував це з текстовим полем і, на жаль, не вийшло. Чи є спосіб це зробити для текстових полів?
Тобіас

2
Для текстового поля просто використовуйте EditorFor замість DisplayFor
Брендон シ Renfrow

10
Не забудьте встановити "ApplyFormatInEditMode = true" у визначенні DisplayFormat, якщо ви хочете, щоб формат дати застосовувався до елементів EditorFor ().
Latedeveloper

1
Мені потрібно було використовувати це для поля DateTime для використання вбудованого вибору дати. Без анотації DisplayFormat консоль javascript у браузері відображатиметься приблизно як "Зазначене значення" 1/1/1990 12:00:00 AM "не відповідає необхідному формату" yyyy-MM-dd "." Мені довелося встановити як DataFormatString, так і встановити для параметра ApplicationFormatInEditMode значення true, щоб помилка пішла і значення було належним чином відображатися при використанні EditorFor у вікні MVC.
Марк

Це працює для мене, але я не знаю - я відчуваю, що порушую розділення проблем, застосовуючи логіку для форматування дати (занепокоєння презентації) в моделі за допомогою атрибута. Я розумію, це так, як Microsoft очікує, що це буде працювати, але здається, що форматування відображення даних повинно бути ізольованим для перегляду, і модель повинна бути просто моделлю.
barrypicker

73

Це рішення:

@item.Published.Value.ToString("dd. MM. yyyy")

Перед ToString () використовуйте значення .


1
цей код правильний, але якщо стовпець дати недійсний, це призведе до помилки, тому спробуйте це
shaijut

Стом правильно, якщо у вас є нульові значення, ви напустіть вам помилку, дякую за посилання
Нік Кан

Тільки те, що я шукав
Роджер Телло

Нульовий виняток може бути оброблений за допомогою оператора зведення нуля - @(item.DOB?.ToString("dd-MMM-yyyy")). Або за допомогою властивості HasValue - @(item.DataDate.HasValue ? item.DataDate.Value.Date.ToString("dd MMM yyyy") : null). В обох випадках властивість має бути зведеною на час датою.
квазар

31

Спробуйте це в MVC 4.0

@Html.TextBoxFor(m => m.YourDate, "{0:dd/MM/yyyy}", new { @class = "datefield form-control", @placeholder = "Enter start date..." })

2
Я не знаю, чому хтось би спротив цю відповідь.
Мікаїл Абдуллаєв,

Я б припустив, що голосування було спричинене тим, що це рішення форматувало дату як "dd / MM / yyyy", а не формат "dd MMM yyyy", який вимагає ОП
PTD

1
Це має бути обраною відповіддю. Я спробував інші, і жоден не спрацював. Дякую.
Віктор Лі

20

Атрибут [DisplayFormat] використовується лише в EditorFor / DisplayFor, а не в сирому інтерфейсі HTML, наприклад TextBoxFor. Я працював так, роблячи наступне,

Модель:

[Display(Name = "When was that document issued ?")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:d}")]
public DateTime? LiquorLicenceDocumentIssueDate { get; set; }

Вид:

        <div id="IsLiquorLicenceDocumentOnPremisesYes" class="groupLongLabel">
            @Html.LabelFor(m => m.LiquorLicenceDocumentIssueDate)
            <span class="indicator"></span>
            @Html.EditorFor(m => m.LiquorLicenceDocumentIssueDate)
            <span id="validEmail"></span>
            <br />
            @Html.ValidationMessageFor(m => m.LiquorLicenceDocumentIssueDate)
        </div>

Вихід: 30.12.2011

Посилання:

http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.displayformatattribute.applyformatineditmode.aspx


1
Ви також можете використовувати @ string.Format ("{0: MM yyyy}", imprint.VersionDate)
Diganta Kumar,


4

Для Razor помістіть файл DateTime.cshtml у папку Views / Shared / EditorTemplates. DateTime.cshtml містить два рядки та створює TextBox з форматною датою, відтвореною 9/11/2001.

@model DateTime?
@Html.TextBox("", (Model.HasValue ? Model.Value.ToShortDateString() : string.Empty), new { @class = "datePicker" })

1
Дякую ... не зміг змусити жодного з інших працювати. Чи дуже змінився C # / Razor на те, де простий формат дати повинен пройти стільки речей для роботи? Найбільш пропонована відповідь в Інтернеті: .... ToString ("dd MMM yyyy") ніколи не працював для мене, і я завжди закінчував його заповненням в змінну, перетворюючи її в дату, а потім виводячи дату. Я знав, що повинен бути один лайнер, який десь працює.
Ентоні Гріггс

Ентоні Гріггс, я відчуваю себе. Радий поділитися болем, щоб ми всі могли отримати через півтора року!
Жуль Бартов

3

Загалом, у письмовому місяці виходить як MMM, чотиризначний рік як yyyy, тому рядок формату повинен виглядати як "dd MMM yyyy"

DateTime.ToString("dd MMM yyyy")

@ ViewBag.PurchaseInfo.LastPurchaseTime.ToString ("dd.MM.yyyy")
yonexbat

3

Мені не вдалося змусити це працювати повністю на основі пропозицій, наведених вище. Включення DataTypeAttribute, [DataType(DataType.Date)]здавалося, вирішило мою проблему, див.

Модель

[Required]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
public DateTime RptDate { get; set; }

Вид

@Html.EditorFor(m => m.CLPosts.RptDate)

HTH


1

Для всього даного рішення, коли ви спробуєте це в сучасному браузері (наприклад, FF), і ви встановили правильну модель

// Model
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}", ApplyFormatInEditMode = true)]
public DateTime Start { get; set; }

// View
<div class="form-group">
    @Html.LabelFor(model => model.Start, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.EditorFor(model => model.Start, "{0:dd-MM-yyyy}", new { htmlAttributes = new { @class = "form-control"} })
    </div>
</div>

mvc (5) wil render ( тип введення встановлюється на сьогоднішній день, виходячи з налаштувань дати у вашій моделі!)

<div class="col-md-10">
<input class="form-control text-box single-line" data-val="true" data-val-date="The field Start must be a date." data-val-required="The Start field is required." id="Start" name="Start" value="01-05-2018" type="date">
        <span class="field-validation-valid text-danger" data-valmsg-for="Start" data-valmsg-replace="true"></span>
</div>

І браузер покаже

введіть тут опис зображення

Щоб виправити це, вам потрібно змінити тип тексту на текст замість дати (також якщо ви бажаєте скористатися власною календарем)

@Html.EditorFor(model => model.Start, "{0:dd-MM-yyyy}", new { htmlAttributes = new { @class = "form-control", @type = "text" } })
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.