Chuyển đổi định dạng DateTime bằng dao cạo


104

Điều gì sai với điều sau đây?

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

@ item.Date đang hiển thị 20/11/2005 12:00 sáng và tôi muốn hiển thị ngày 20 tháng 11 năm 2011


1
Có thể tìm thấy sự kết hợp của các mã định dạng ngày khác nhau tồn tại tại đây: msdn.microsoft.com/en-us/library/8kb3ddd4.aspx
Joseph Woodward,

Câu trả lời:


264

Thử:

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

hoặc bạn có thể sử dụng [DisplayFormat]thuộc tính trên mô hình chế độ xem của mình:

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

và theo quan điểm của bạn chỉ đơn giản là:

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

3
Tôi đã thử điều này với một hộp văn bản và rất tiếc là nó không hoạt động. Có cách nào để làm điều này cho hộp văn bản không?
Tobias

2
Đối với một textbox chỉ cần sử dụng EditorFor thay vì DisplayFor
BrandonシRenfrow

10
Hãy nhớ đặt "ApplyFormatInEditMode = true" trong định nghĩa DisplayFormat của bạn nếu bạn muốn áp dụng định dạng ngày cho các phần tử EditorFor ().
Latedeveloper

1
Tôi cần sử dụng trường này cho trường DateTime để sử dụng bộ chọn ngày tích hợp sẵn. Nếu không có chú thích DisplayFormat, bảng điều khiển javascript trong trình duyệt sẽ hiển thị một cái gì đó như "Giá trị được chỉ định '1/1/1990 12:00:00 AM' không phù hợp với định dạng bắt buộc, 'yyyy-MM-dd'." Tôi đã phải đặt cả DataFormatString và đặt ApplyFormatInEditMode thành true để lỗi biến mất và giá trị hiển thị đúng khi sử dụng EditorFor trong chế độ xem MVC của tôi.
Đánh dấu

Điều này phù hợp với tôi, nhưng tôi không hiểu - tôi có cảm giác mình đang vi phạm việc phân tách các mối quan tâm bằng cách áp dụng logic để định dạng ngày (mối quan tâm trình bày) trong mô hình thông qua một thuộc tính. Tôi hiểu đây là cách Microsoft mong đợi điều này hoạt động, nhưng có vẻ như định dạng hiển thị dữ liệu nên được tách biệt với chế độ xem và mô hình chỉ nên là một mô hình.
barrypicker,

73

Đây là giải pháp:

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

Trước khi ToString () sử dụng Giá trị .


1
mã này là đúng nhưng nếu cột ngày là null, điều này sẽ ném lỗi, vì vậy hãy thử này
shaijut

STOM là đúng, nếu bạn có giá trị null sẽ ném bạn ra lỗi, nhờ các liên kết
Nick Kahn

Đúng những gì tôi đang tìm kiếm
Roger Tello

Ngoại lệ null có thể được xử lý bằng cách sử dụng toán tử liên kết null - @(item.DOB?.ToString("dd-MMM-yyyy")). Hoặc bằng cách sử dụng thuộc tính HasValue - @(item.DataDate.HasValue ? item.DataDate.Value.Date.ToString("dd MMM yyyy") : null). Trong cả hai trường hợp, thuộc tính phải là datetime có thể vô hiệu.
chuẩn tinh

31

Hãy thử điều này trong MVC 4.0

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

2
Tôi không biết tại sao mọi người lại tán thành câu trả lời này.
Mikayil Abdullayev

Tôi cho rằng lượt phản đối là do giải pháp này định dạng ngày là "dd / MM / yyyy" chứ không phải định dạng "dd MMM yyyy" mà OP đã yêu cầu
PTD

1
Đây là câu trả lời được chọn. Tôi đã thử những người khác và không có hiệu quả. cám ơn.
Victor Lee

20

Thuộc tính [DisplayFormat] chỉ được sử dụng trong EditorFor / DisplayFor và không được sử dụng bởi các API HTML thô như TextBoxFor. Tôi đã làm cho nó hoạt động bằng cách làm như sau,

Mô hình:

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

Lượt xem:

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

Sản lượng: 30/12/2011

Liên kết liên quan:

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


1
Ngoài ra, bạn cũng có thể sử dụng @ string.Format ("{0: MM yyyy}", print.VersionDate)
Diganta Kumar,

8

Mã dưới đây sẽ giúp bạn

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

4

Đối với Razor, hãy đặt tệp DateTime.cshtml vào thư mục Views / Shared / EditorTemplates. DateTime.cshtml chứa hai dòng và tạo ra một TextBox có định dạng ngày là 11/9/2001.

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

1
Cảm ơn bạn ... không thể làm cho không ai trong số những người khác làm việc. Có phải C # / Razor đã thay đổi nhiều đến mức mà một định dạng ngày tháng đơn giản phải trải qua quá nhiều thứ để hoạt động không? Câu trả lời được đề xuất nhiều nhất trên internet: .... ToString ("dd MMM yyyy") chưa bao giờ phù hợp với tôi và tôi đã luôn nhồi nhét nó vào một biến chuyển đổi nó thành một ngày tháng và sau đó xuất ra ngày tháng. Tôi biết phải có một tấm lót hoạt động ở đâu đó.
Anthony Griggs

Anthony Griggs, tôi cảm thấy tuyệt vời. Rất vui khi được chia sẻ nỗi đau để tất cả chúng ta có thể đạt được - 6,5 năm sau!
Jules Bartow

3

Nói chung, tháng đã viết được thoát là MMM, năm gồm 4 chữ số là yyyy, do đó, chuỗi định dạng của bạn sẽ giống như "dd MMM yyyy"

DateTime.ToString("dd MMM yyyy")

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

3

Tôi không thể làm cho điều này hoạt động hoàn toàn dựa trên các đề xuất ở trên. Bao gồm DataTypeAttribute [DataType(DataType.Date)]dường như giải quyết được vấn đề của tôi, hãy xem:

Mô hình

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

Lượt xem

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

HTH


1

Đối với tất cả các giải pháp đã cho, khi bạn thử điều này trong một trình duyệt hiện đại (như FF) và bạn đã đặt đúng mô hình

// 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 ( loại đầu vào được đặt thành ngày tháng dựa trên cài đặt ngày tháng trong mô hình của bạn!)

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

Và trình duyệt sẽ hiển thị

nhập mô tả hình ảnh ở đây

Để khắc phục điều này, bạn cần thay đổi loại thành văn bản thay vì ngày (cũng như nếu bạn muốn sử dụng lịch tùy chỉnh của mình)

@Html.EditorFor(model => model.Start, "{0:dd-MM-yyyy}", new { htmlAttributes = new { @class = "form-control", @type = "text" } })
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.