날짜 만 표시하고 시간은 표시하지 않음


91

MVC 면도기에서는 이와 같이 데이터베이스에 현재 날짜를 넣습니다.

model.Returndate = DateTime.Now.Date.ToShortDateString();

데이터베이스 필드가 datetime 데이터 유형이고 현재 날짜를 문자열 형식으로 변환하고 있기 때문에 작동하지 않습니다. 어떻게해야합니까? 날짜를 mm / dd / yyyy hh : mm : ss 시간 형식이 아닌 mm / dd / yyyy 형식으로 원하기 때문에 문자열 형식을 사용하고 있습니다.

편집하다:

컨트롤러에는

var model = new ViewModel();
model.ReturnDate = DateTime.Now;            
return PartialView("PartialView", model);  

부분보기에서 나는

@Html.EditorFor(model => model.Returndate)

이것은 날짜와 시간을 함께 표시하는 곳입니다 ... 날짜 만 표시하고 싶습니다. 시간이 아닙니다. 이 편집이 더 잘 설명되기를 바랍니다.


1
00:00:00 (자정)은 걱정하지 마세요. ToString("mm/dd/yyyy");원하는 것을 정확히 볼 수 있도록 출력 형식 을 지정하십시오.
Chase Florell 2011-08-19

1
데이터베이스의 데이터를 DateTime. 출력에서 문자열 형식을 지정합니다. 최종 뷰어로만 형식을 지정합니다.
Chase Florell

답변:


96

열 유형이 SQL에서 DateTime이면 통과 여부를 저장합니다.

날짜를 제대로 저장하는 것이 좋습니다.

model.ReturnDate = DateTime.Now;

표시해야 할 때 형식을 지정합니다.

@Html.Label(Model.ReturnDate.ToShortDateString())

또는 EditorFor를 사용하는 경우 :

@Html.EditorFor(model => model.ReturnDate.ToShortDateString())

또는

@Html.EditorFor(model => model.ReturnDate.ToString("MM/dd/yyyy"))

모델에 속성을 추가하려면 다음 코드를 추가하세요.

public string ReturnDateForDisplay
{
    get
    {
       return this.ReturnDate.ToString("d");
    }
}

그런 다음 PartialView에서 :

@Html.EditorFor(model => model.ReturnDateForDisplay)

편집하다:

안녕하세요 여러분,이 답변에 대해 'If you 're using EditorFor'라는 말로 표현하려는 값 유형에 대한 EditorFor 템플릿이 필요하다는 것을 분명히하고 싶습니다.

편집기 템플릿은 MVC에서 반복적 인 컨트롤을 관리하는 멋진 방법입니다.

http://coding-in.net/asp-net-mvc-3-how-to-use-editortemplates/

위에서 한 것처럼 String과 같은 순진한 유형에 사용할 수 있습니다. 그러나 더 복잡한 데이터 유형에 대한 입력 필드 세트를 템플릿으로 만드는 데 특히 유용합니다.


누가 이것을 비판했는지 모르겠지만 HTML.label을 사용하여 이것을 표시하고 있지 않습니다. HTML.EditorFor (model => model.Returndate)를 사용하고 있습니다.이 경우 디스플레이 형식을 지정하려면 어떻게해야하나요?
ZVenue

이는 결과 형식을 지정하는 방법의 예일뿐입니다. 내 대답을 업데이트하겠습니다.
Russ Clarke

14
@Russ : 업데이트 한 편집기가 작동하지 않습니다. "템플릿은 필드 액세스, 속성 액세스, 단일 차원 배열 인덱스 또는 단일 매개 변수 사용자 지정 인덱서 식에만 사용할 수 있습니다."라는 오류가 발생합니다.
ZVenue 2011 년

1
내 대답에 추가하겠습니다
Russ Clarke

19
작동하지 않기 때문에 답변에서 '@ Html.EditorFor (model => model.ReturnDate.ToShortDateString ())'을 제거해야합니다.
James Reategui

129

이 시나리오를 직접 처리해야했습니다.이 작업을 수행하는 정말 쉬운 방법을 찾았습니다. 다음과 같이 모델에 속성에 주석을 달기 만하면됩니다.

[DataType(DataType.Date)]
public DateTime? SomeDateProperty { get; set; }

날짜 선택기에서도 시간 버튼을 숨 깁니다.

이 답변이 조금 늦으면 죄송합니다.)


감사합니다. 저에게 매우 도움이되는 게시물이었습니다! +1
Dmytro 2012

1
내가 필요한 것만. 우수한!
RealityDysfunction

1
여전히 서식 멋진의 정도를 사용하는 저를 허용하는 것이 - 크롬 입력 유형이 날짜, 내가 생각하는 HTML5의 일부 경우에 재미있는 물건을 어디다 나는 DataType.Text 갔다, 그래서 내가 대신 JQuery와 날짜 선택기를 사용하고 싶었 최근 sitation했다

2
늦었다 고 사과 할 필요가 없습니다. 오래된 질문에 대한 답변을 게시하는 것은 OP가 아닌 사람들에게 큰 도움이 될 수 있습니다. 이것이 가능하다는 것을 알고 있었지만 방법을 기억할 수 없었기 때문에 내가 찾고 있던 대답이며 3 년 전에 게시했습니다. 당신은 믿을 수 없을 정도로 일찍입니다.
RyanfaeScotland

날짜 내가이 도울 수있는 방법을 모르는 데이터베이스에서 온다면 ... 그것을 알아낼 수 없습니다
앙투안의 Pelletier에게

41

TextBox에 표시하려는 경우 작동합니다.

@Html.TextBoxFor(m => m.Employee.DOB, "{0:dd-MM-yyyy}")

브라우저의 설정 형식이 "dd-MM-yyyy"와 다른 경우 (예 : "MM-dd-yyyy") 날짜가 잘못 표시됨
Oleg Sh

16

datebase의 날짜 / 시간은 형식이 지정된 버전 이 아닙니다 . 날짜 / 시간 자체 일뿐입니다. 데이터베이스에서 값을 추출 할 때 해당 날짜 / 시간 을 표시 하는 방법 은 다른 문제입니다. 나는 당신이 정말로 원하는 것을 강력히 의심합니다.

model.Returndate = DateTime.Now.Date;

또는 아마도

model.Returndate = DateTime.UtcNow.Date;

당신은 SQL 서버 스튜디오 또는 무엇이든을 사용하여 데이터베이스를 보면 예, 당신은 지금 자정를 볼 수 있습니다 -하지만 관련이없는, 그리고 데이터베이스의 날짜를 가져오고 사용자에게 표시 할 때, 다음 당신은 관련 서식을 적용 할 수 있습니다 .

편집 : 편집 한 질문과 관련하여 문제는 모델에있는 것이 아니라보기를 지정하는 방법입니다. 다음과 같이 사용해야합니다.

@Html.EditorFor(model => model.Returndate.Date.ToString("d"))

짧은 날짜 패턴에 대한 표준 날짜 및 시간 형식 지정d 자는 어디에 있습니까 (현재 문화적 설정을 고려함을 의미 함).

그것은 내가 반복해서 말했던 부분입니다 . 사용자에게 날짜 / 시간을 표시 할 때 시간이없는 날짜로 형식을 지정하는 시간입니다.

편집 : 이것이 작동하지 않으면 형식 문자열 또는 이와 유사한 형식으로 모델 또는보기를 장식하는 방법이 있어야합니다. 나는 정말로 MVC 사람은 아니지만 이것을 선언적으로 수행하는 좋은 방법 이 있어야 할 것 같습니다 ...


DateTime.Now.Date는 여전히 날짜와 함께 시간을 표시합니다.
ZVenue

1
@ZVenue : 어디에 표시합니까? 당신은해야 저장 날짜 시간 값을, 그리고 당신이있는 곳 날짜 전용 형식 지정자를 사용하여 표시하는 날짜를. 제공 한 코드 (모델에서 속성 설정)는 아마도 저장을위한 것이므로 자정이되는 것은 중요하지 않습니다.
Jon Skeet

Jon은 내가 말한 것을 제안하고 날짜를 그대로 SQL에 저장했습니다. 그런 다음 인쇄 할 때 날짜 형식을 적절하게 지정할 수 있습니다.
Russ Clarke

2
@Jon : html.editorfor ....에 대한 편집 코드를 사용할 때이 오류가 발생합니다. "템플릿은 필드 액세스, 속성 액세스, 단일 차원 배열 인덱스 또는 단일 매개 변수 사용자 정의 인덱서 표현식에서만 사용할 수 있습니다." ... 런타임에
ZVenue

1
@ZVenue : 이것도보세요 : stackoverflow.com/questions/5033902/…
Jon Skeet

8

다음과 같이 ViewModel을 수정할 수 있습니다.

[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}",ApplyFormatInEditMode = true)]

이 솔루션은 또한 Chrome의 날짜 선택기 충돌 문제를 해결합니다. Viewmodel에서 Datatype.Date를 지정하면 Chrome은 텍스트 상자에 자체 버전의 datepicker를 사용합니다. 감사합니다!
Katherine

7

다음 ToString과 같이 사용자 지정 날짜 시간 형식을 적용 할 수 있습니다 .

DateTime.Now.Date.ToString("MM/dd/yyyy");

DateTime.ToString형식 패턴 에 대한 자세한 내용 은 여기여기 에서 찾을 수 있습니다 .

편집 : 질문 편집 후 다른 제안과 마찬가지로보기에 날짜 형식을 적용해야합니다.

model.Returndate = DateTime.Now.Date;

@Html.EditorFor(model => model.Returndate.Date.ToString("MM/dd/yyyy"))

1
그래도 날짜를 저장하는 문제는 도움이되지 않습니다.
Russ Clarke

그는 전화로 그것을 저장할 수 없습니까 model.Returndate.ToString("mm/dd/yyyy")?
Jalal Said

그게 문제예요 .. db의 datetime 필드에 그 값을 넣습니다. 그래서 이것은 작동하지 않습니다 .. 내 원래 게시물을 참조하십시오.
ZVenue

.ToString ( "MM / dd / yyyy")이 아니어야합니까? mm은 몇 달이 아니라 분입니다!
Bodrick 2011-08-19

@Bodrich : 감사합니다, 업데이트되었습니다.하지만 그의 패턴을 복사하여 붙여 넣습니다.
Jalal Said

4

Razor에서는 확실하지 않지만 ASPX에서는 다음을 수행합니다.

 <%if (item.Modify_Date != null)
  {%>
     <%=Html.Encode(String.Format("{0:D}", item.Modify_Date))%>     
<%} %>

Razor에도 비슷한 것이있을 것입니다. 바라건대 이것은 누군가를 도울 것입니다.


1
네 면도기 구문, 예를 들면 @ Html.Encode에서이 것 또한 작업 (및 String.format ( "0 : D", item.Modify_Date))
인 Ciaran 갤러거

4

아래와 같은 for 루프가있는 경우.

@ item.StartDate를 @ item.StartDate.Value.ToShortDateString ()으로 변경합니다.

이것은 내 경우와 같이 모델에서 속성에 주석을 달 수없는 경우를 대비하여 시간을 제거합니다.

<table>
  <tr>
   <th>Type</th>
   <th>Start Date</th>
  </tr>
    @foreach (var item in Model.TestList) {
      <tr>
        <td>@item.TypeName</td>
        <td>@item.StartDate.Value.ToShortDateString()</td>
      </tr>
      }
</table>

2

DisplayFormat 및 ApplyFormatInEditMode와 같은 데이터 주석을 포함하여 원하는 출력을 얻습니다.

[Display(Name = "Bill Date")] [DataType(DataType.Date)] [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)] public DateTime BillDate { get; set; }

이제 청구서 날짜가 다음과 같이 표시됩니다.

여기에 이미지 설명 입력


다른 답변을 살펴보십시오. 당신은 당신의 것이 필요하다고 생각하고 게시물에 새로운 품질의 콘텐츠를 추가합니까?
L. Guthardt

1

단순히 datetime을 변환 할 수 있습니다. 다음과 같은 것 :

@Convert.ToString(string.Format("{0:dd/MM/yyyy}", Model.Returndate))

1

이 페이지의 다른 솔루션에 문제가 있었기 때문에 이것을 놓을 것이라고 생각했습니다.

@Html.TextBoxFor(m => m.EndDate, "{0:d}", new { @class = "form-control datepicker" })

따라서 두 번째 매개 변수에 '{0 : d}'만 추가하면됩니다.

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