Razor를 사용하여 DateTime 형식 변환


답변:


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
나는 이것을 텍스트 상자로 시도했지만 불행히도 작동하지 않았습니다. 텍스트 상자에이 작업을 수행하는 방법이 있습니까?
Tobias

2
텍스트 상자의 경우 DisplayFor 대신 EditorFor를 사용하십시오.
Brandon シ Renfrow

10
날짜 형식을 EditorFor () 요소에 적용하려면 DisplayFormat 정의에서 "ApplyFormatInEditMode = true"를 설정해야합니다.
Latedeveloper 2010 년

1
기본 제공 날짜 선택기를 사용하려면 DateTime 필드에 이것을 사용해야했습니다. DisplayFormat 주석이 없으면 브라우저의 자바 스크립트 콘솔에 '지정된 값'1/1/1990 12:00:00 AM '이 필수 형식'yyyy-MM-dd '와 일치하지 않습니다.'와 같은 내용이 표시됩니다. MVC 뷰에서 EditorFor를 사용할 때 오류가 사라지고 값이 제대로 표시되도록 DataFormatString과 ApplyFormatInEditMode를 true로 설정해야했습니다.
Mark

이것은 저에게 효과적이지만 모르겠습니다. 속성을 통해 모델에서 날짜 (프레젠테이션 관심사)를 형식화하는 논리를 적용하여 관심사 분리를 위반하고 있다는 느낌을받습니다. 나는 이것이 Microsoft가 이것이 작동하기를 기대하는 방식이라는 것을 이해하지만 데이터 표시 형식이 뷰에 격리되어야하고 모델은 모델이어야합니다.
barrypicker 2015-07-29

73

이것이 해결책입니다.

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

ToString () 전에 Value를 사용하십시오 .


1
이 코드는 올바르지 만 날짜 열이 null 인 경우,이 오류가 발생합니다, 그래서 노력
shaijut

Stom이 정확합니다. null 값이 있으면 오류가 발생합니다. 링크에 감사드립니다
Nick Kahn

그냥 내가 무엇을 찾고 있었다
로저 테요

Null 예외는 null 통합 연산자-를 사용하여 처리 할 수 ​​있습니다 @(item.DOB?.ToString("dd-MMM-yyyy")). 또는 HasValue 속성을 사용하여- @(item.DataDate.HasValue ? item.DataDate.Value.Date.ToString("dd MMM yyyy") : null). 두 경우 모두 속성은 nullable datetime이어야합니다.
퀘이사

31

MVC 4.0에서 시도해보십시오.

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

2
나는 왜 누군가이 대답을 반대표를 던지는 지 모르겠습니다.
Mikayil Abdullayev

나는이 솔루션 때문에 OP가 요청한 "dd MMM yyyy"형식이 아니라 "dd / MM / yyyy"로 날짜를 형식화 한 것으로 간주합니다
PTD

1
이것은 선택된 답이어야합니다. 나는 다른 것을 시도했지만 아무도 작동하지 않았습니다. 고마워.
Victor Lee

20

[DisplayFormat] 속성은 TextBoxFor와 같은 원시 HTML API가 아닌 EditorFor / DisplayFor에서만 사용됩니다. 다음을 수행하여 작동하게했습니다.

모델:

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

출력 : 2011 년 12 월 30 일

관련 링크 :

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


1
또는 @ string.Format ( "{0 : MM yyyy}",
imprint.VersionDate

8

아래 코드가 도움이 될 것입니다.

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

4

Razor의 경우 파일 DateTime.cshtml을 Views / Shared / EditorTemplates 폴더에 넣습니다. DateTime.cshtml은 두 줄을 포함하고 날짜 형식이 2001 년 9 월 11 일인 TextBox를 생성합니다.

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

1
감사합니다 ... 다른 사람이 일하게 할 수 없었습니다. C # / Razor는 간단한 날짜 형식이 작동하기 위해 많은 작업을 거쳐야하는 곳으로 많이 변경 되었습니까? 인터넷에서 가장 제안 된 답변 : .... ToString ( "dd MMM yyyy")은 저에게 효과가 없었으며 항상 변수로 채워서 날짜로 변환 한 다음 날짜를 출력했습니다. 나는 어딘가에서 일하는 하나의 라이너가 있어야한다는 것을 알고 있었다.
Anthony Griggs 2018

Anthony Griggs, 기분이 좋아. --6½ 년 후에 우리 모두가 얻을 수 있도록 고통을 공유하게되어 기쁩니다!
Jules Bartow

3

일반적으로 기록 된 월은 MMM으로, 4 자리 연도는 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) 렌더링 줘야합니다 ( 유형 입력의로 설정되어 최신 모델의 날짜 설정에 따라!)

<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" } })
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.