Mengubah format DateTime menggunakan pisau cukur


Jawaban:


264

Mencoba:

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

atau Anda dapat menggunakan [DisplayFormat]atribut pada model tampilan Anda:

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

dan dalam pandangan Anda:

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

3
Saya mencoba ini dengan kotak teks dan sayangnya itu tidak berhasil. Apakah ada cara untuk melakukan ini untuk kotak teks?
Tobias

2
Untuk kotak teks, cukup gunakan EditorFor, bukan DisplayFor
Brandon シ Renfrow

10
Ingatlah untuk menyetel "ApplyFormatInEditMode = true" dalam definisi DisplayFormat jika Anda ingin format tanggal diterapkan ke elemen EditorFor ().
Pengembang terlambat

1
Saya perlu menggunakan ini untuk bidang DateTime untuk menggunakan pemilih tanggal bawaan. Tanpa anotasi DisplayFormat, konsol javascript di browser akan menampilkan sesuatu seperti "Nilai yang ditentukan '1/1/1990 12:00:00 AM' tidak sesuai dengan format yang diperlukan, 'yyyy-MM-dd'." Saya harus menyetel DataFormatString dan menyetel ApplyFormatInEditMode ke true agar kesalahan hilang dan nilainya ditampilkan dengan benar saat menggunakan EditorFor dalam tampilan MVC saya.
Tandai

Ini berfungsi untuk saya, tetapi saya tidak tahu - saya merasa saya melanggar pemisahan masalah dengan menerapkan logika untuk memformat tanggal (masalah presentasi) dalam model melalui atribut. Saya mengerti ini adalah cara Microsoft mengharapkan ini bekerja, tetapi sepertinya pemformatan tampilan data harus diisolasi ke tampilan dan modelnya hanya menjadi model.
barrypicker

73

Inilah solusinya:

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

Sebelum ToString () gunakan Value .


1
kode ini benar tetapi jika kolom tanggal adalah nol, ini akan
menimbulkan

Stom benar, jika Anda memiliki nilai nol akan membuat Anda kesalahan, terima kasih untuk tautannya
Nick Kahn

Persis yang saya cari
Roger Tello

Pengecualian nol dapat ditangani dengan menggunakan operator penggabungan nol - @(item.DOB?.ToString("dd-MMM-yyyy")). Atau dengan menggunakan properti HasValue - @(item.DataDate.HasValue ? item.DataDate.Value.Date.ToString("dd MMM yyyy") : null). Dalam kedua kasus, properti harus berupa tanggal waktu nullable.
quasar

31

Coba ini di MVC 4.0

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

2
Saya tidak tahu mengapa ada orang yang meremehkan jawaban ini.
Mikayil Abdullayev

Saya akan berasumsi bahwa downvote tersebut disebabkan oleh solusi ini yang memformat tanggal sebagai "dd / MM / yyyy" daripada format "dd MMM yyyy" yang diminta OP
PTD

1
Yang ini harus menjadi jawaban yang dipilih. Saya mencoba yang lain dan tidak ada yang berhasil. Terima kasih.
Victor Lee

20

Atribut [DisplayFormat] hanya digunakan di EditorFor / DisplayFor, dan bukan oleh API HTML mentah seperti TextBoxFor. Saya membuatnya berfungsi dengan melakukan hal berikut,

Model:

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

Melihat:

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

Hasil: 30/12/2011

Link terkait:

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


1
Selain itu, Anda juga dapat menggunakan @ string.Format ("{0: MM yyyy}",
imprint.VersionDate

8

Kode di bawah ini akan membantu Anda

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

4

Untuk Razor, letakkan file DateTime.cshtml di folder Views / Shared / EditorTemplates. DateTime.cshtml berisi dua baris dan menghasilkan TextBox dengan format tanggal 9/11/2001.

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

1
Terima kasih ... tidak bisa mendapatkan yang lain untuk bekerja. Apakah C # / Razor berubah sebanyak itu dimana format tanggal yang sederhana harus melalui banyak hal untuk bekerja? Jawaban yang paling disarankan di internet: .... ToString ("dd MMM yyyy") tidak pernah berhasil untuk saya dan saya selalu memasukkannya ke dalam variabel, mengubahnya menjadi tanggal dan kemudian mengeluarkan tanggal. Saya tahu pasti ada satu liner yang berfungsi di suatu tempat.
Anthony Griggs

Anthony Griggs, saya merasa ya cuz. Senang berbagi rasa sakit sehingga kita semua bisa memperoleh keuntungan --6½ tahun kemudian!
Jules Bartow

3

Secara umum, bulan tertulis di-escape sebagai MMM, tahun 4 digit sebagai yyyy, jadi format string Anda akan terlihat seperti "hh MMM yyyy"

DateTime.ToString("dd MMM yyyy")

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

3

Saya tidak bisa membuat ini bekerja sepenuhnya berdasarkan saran di atas. Menyertakan DataTypeAttribute [DataType(DataType.Date)]sepertinya menyelesaikan masalah saya, lihat:

Model

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

Melihat

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

HTH


1

Untuk semua solusi yang diberikan, saat Anda mencoba ini di browser modern (seperti FF), dan Anda telah menetapkan model yang benar

// 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 ( jenis input disetel ke tanggal berdasarkan pengaturan tanggal Anda dalam model Anda!)

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

Dan browser akan ditampilkan

masukkan deskripsi gambar di sini

Untuk memperbaikinya, Anda perlu mengubah jenis menjadi teks, bukan tanggal (juga jika Anda ingin menggunakan kalender kustom Anda)

@Html.EditorFor(model => model.Start, "{0:dd-MM-yyyy}", new { htmlAttributes = new { @class = "form-control", @type = "text" } })
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.