Razor kullanarak DateTime formatını dönüştürme


Yanıtlar:


264

Deneyin:

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

veya [DisplayFormat]özelliği görünüm modelinizde kullanabilirsiniz:

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

ve size göre basitçe:

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

3
Bunu bir metin kutusuyla denedim ve ne yazık ki işe yaramadı. Metin kutuları için bunu yapmanın bir yolu var mı?
Tobias

2
Metin kutusu için DisplayFor yerine EditorFor kullanın
Brandon シ Renfrow

10
Tarih formatının EditorFor () öğelerine uygulanmasını istiyorsanız DisplayFormat tanımınızda "ApplyFormatInEditMode = true" ayarlamayı unutmayın.
Latedeveloper

1
Yerleşik tarih seçiciyi kullanmak için bunu bir DateTime alanı için kullanmam gerekiyordu. DisplayFormat ek açıklaması olmadan, tarayıcıdaki javascript konsolu "Belirtilen değer '1/1/1990 12:00:00 AM' gerekli biçime uymuyor, 'yyyy-MM-gg' gibi bir şey gösterecektir. MVC görünümümde EditorFor kullanırken hatanın giderilmesi için hem DataFormatString'i hem de ApplyFormatInEditMode değerini true olarak ayarlamak zorunda kaldım.
Mark

Bu benim için işe yarıyor, ama bilmiyorum - modeldeki bir tarihi (bir sunum kaygısı) bir öznitelik aracılığıyla biçimlendirmek için mantık uygulayarak endişelerin ayrılmasını ihlal ettiğimi hissediyorum. Microsoft'un bunun böyle çalışmasını beklediğini anlıyorum, ancak görünen o ki, veri görüntüleme biçimlendirmesi görünüme göre izole edilmeli ve model sadece bir model olmalı.
barrypicker

73

Bu çözüm:

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

ToString () Değerini kullanmadan önce .


1
Bu kod doğru ama tarih sütunu boş ise, bu hata atmak olacaktır, bu nedenle deneyin bu
shaijut

Stom doğru, boş değerleriniz varsa hataya neden olur, bağlantı için teşekkürler
Nick Kahn

Tam aradığım şey
Roger Tello

Null istisna, boş birleştirme operatörü - kullanılarak işlenebilir @(item.DOB?.ToString("dd-MMM-yyyy")). Veya HasValue özelliğini kullanarak - @(item.DataDate.HasValue ? item.DataDate.Value.Date.ToString("dd MMM yyyy") : null). Her iki durumda da özellik null yapılabilir tarih saat olmalıdır.
quasar

31

Bunu MVC 4.0'da deneyin

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

2
Kimse bu cevaba neden olumsuz oy versin bilmiyorum.
Mikayil Abdullayev

Olumsuz oylamanın, OP'nin talep ettiği "gg MMM yyyy" biçiminden ziyade tarihi "gg / AA / yyyy" olarak biçimlendiren bu çözümden kaynaklandığını varsayıyorum
PTD

1
Bu seçilen cevap olmalıdır. Diğerlerini denedim ve hiçbiri işe yaramadı. Teşekkürler.
Victor Lee

20

[DisplayFormat] niteliği yalnızca EditorFor / DisplayFor'da kullanılır ve TextBoxFor gibi ham HTML API'leri tarafından kullanılmaz. Aşağıdakileri yaparak çalıştırdım,

Model:

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

Görünüm:

        <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>

Çıktı: 30/12/2011

İlgili bağlantı:

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


1
Alternatif olarak, @ string.Format ("{0: MM yyyy}", imprint.VersionDate) kullanabilirsiniz
Diganta Kumar

8

Aşağıdaki kod size yardımcı olacaktır

@Html.Label(@item.Date.Value.ToString("dd - M - yy"))

4

Razor için DateTime.cshtml dosyasını Views / Shared / EditorTemplates klasörüne koyun. DateTime.cshtml iki satır içerir ve tarihi 11.09.2001 olarak biçimlendirilmiş bir Metin Kutusu oluşturur.

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

1
Teşekkür ederim ... diğerlerinden hiçbiri işe yaramadı. C # / Razor, basit bir tarih biçiminin çalışması için bu kadar çok şeyden geçmesi gereken yere kadar değişti mi? İnternette en çok önerilen cevap: .... ToString ("gg MMM yyyy") benim için hiç işe yaramadı ve her zaman onu bir değişkene doldurup onu bir tarihe dönüştürüp ardından tarih çıktısını vermiştim. Bir yerlerde işe yarayan tek bir astar olması gerektiğini biliyordum.
Anthony Griggs

Anthony Griggs, seni kuzen hissediyorum. Acıyı paylaşmaktan mutluyum ki hepimiz --6½ yıl sonra kazanabilelim!
Jules Bartow

3

Genel olarak, yazılı aydan MMM, 4 basamaklı yıl yyyy olarak öncelenir, bu nedenle biçim dizeniz "gg MMM yyyy" gibi görünmelidir

DateTime.ToString("dd MMM yyyy")

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

3

Yukarıdaki önerilere dayanarak bunu tamamen çalıştırmayı başaramadım. DataTypeAttribute dahil olmak [DataType(DataType.Date)]sorunumu çözmüş gibiydi, bakınız:

Modeli

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

Görünüm

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

HTH


1

Verilen tüm çözüm için, bunu modern bir tarayıcıda (FF gibi) denediğinizde ve doğru modeli belirlediğinizde

// 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 ( giriş türü , modelinizdeki tarih ayarlarınıza göre tarihe ayarlanır !)

<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>

Ve tarayıcı gösterecek

görüntü açıklamasını buraya girin

Bunu düzeltmek, değiştirmek gerekmez için türünü için metnin yerine tarihinden (bu özel takvim kullanmak istiyorsanız da varsa)

@Html.EditorFor(model => model.Start, "{0:dd-MM-yyyy}", new { htmlAttributes = new { @class = "form-control", @type = "text" } })
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.