日付のみを表示し、時間は表示しない


91

MVCかみそりでは、現在の日付をこのようにデータベースに入れています。

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

データベースフィールドは日時データ型であり、現在の日付を文字列形式に変換しているので、これは機能しません。これを行うにはどうすればよいですか?日付をmm / dd / yyyy形式ではなくmm / dd / yyyy形式で指定したいので、文字列形式を使用しています。hh:mm:ss時間形式です。

編集:

私が持っているコントローラーで

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

1
データをデータベースにとして保存しますDateTime。OUTPUTで文字列のフォーマットを行います...エンドビューアでのみフォーマットします。
Chase Florell、2011

回答:


96

SQLで列タイプがDateTimeの場合、それは、1つを渡すかどうかを示す時刻を格納します。

日付を適切に保存することをお勧めします。

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)

編集:

こんにちは皆さん、この回答を明確にしたいのは、「EditorForを使用している場合」と言うことで、それは、表現しようとしている値のタイプに対応するEditorForテンプレートが必要であることを意味します。

エディターテンプレートは、MVCで繰り返しコントロールを管理するためのクールな方法です。

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

上記のように、これらをStringのような単純な型に使用できます。しかし、これらは、より複雑なデータ型の入力フィールドのセットをテンプレート化するのに特に優れています。


必ずこれをdownvotedない人..しかし、私は..私はHTML.EditorForを使用しています(モデル=> model.Returndate)どのように私は...この場合の表示をフォーマットしない、これを表示するためにHTML.labelを使用していない
ZVenue

これは、結果をフォーマットする方法の例にすぎません。回答を更新します。
Russ Clarke

14
@Russ:更新したeditorforが機能しませんでした。「テンプレートは、フィールドアクセス、プロパティアクセス、1次元配列インデックス、または1パラメータのカスタムインデクサー式でのみ使用できます。」というエラーが表示されます。
Z会場2011

1
私はそれを私の答えに追加します
Russ Clarke

19
それが機能しないため、回答から「@ Html.EditorFor(model => model.ReturnDate.ToShortDateString())」を削除する必要があります。
James Reategui

129

このシナリオを自分で処理する必要がありました。これを行う非常に簡単な方法が見つかりました。次のようにモデルでプロパティに注釈を付けるだけです。

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

また、日付ピッカーから時刻ボタンを非表示にします。

この答えが少し遅れている場合は申し訳ありません;)


どうもありがとう。それは私にとって非常に役立つ投稿でした!+1
Dmytro

1
ちょうど私が必要としたもの。優れた!
RealityDysfunction

1
私は最近、sitationを持っていたクロムは、入力タイプは、日付、私が考えるHTML5の一部である場合には面白いものを置くところ、私は私がDataType.Textと一緒に行ったので、代わりにjQueryの日付ピッカーを使用していた-まだ私はクールの十分のフォーマットの使用を許可することを
ジョン・

2
遅れたことをお詫びする必要はありません。古い質問への回答を投稿することは、OPを利用していない人にとって大きな助けになります。これが可能であることがわかっていて、その方法を思い出せなかったので、これは私が探していた答えです。あなたは3年前に投稿しました。どちらかと言えばあなたは信じられないほど早いです。
RyanfaeScotland

日付がデータベースからのものである場合、私はこれがどのように役立つかわかりません...わかりません
Antoine Pelletier

41

これは、TextBoxに表示する場合に機能します。

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

ブラウザーの設定で "dd-MM-yyyy"と異なるフォーマット、つまり "MM-dd-yyyy"を使用すると、日付が正しく表示されません
Oleg Sh

16

日付ベースの日付/時刻は、フォーマットされたバージョンではありません。日付/時刻そのものになります。データベースから値を抽出するときにその日付/時刻を表示する方法は、別の問題です。私はあなたが本当に欲しいだけだと強く信じています:

model.Returndate = DateTime.Now.Date;

または多分

model.Returndate = DateTime.UtcNow.Date;

はい、SQL Server Studioなどを使用してデータベースを見ると、午前0時が表示されますが、それは無関係であり、データベースから日付をフェッチしてユーザーに表示するときに、関連する形式を適用できます。 。

編集:編集した質問に関しては、問題はモデルにありません-ビューを指定する方法です。あなたは次のようなものを使うべきです:

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

ここdで、は短い日付パターンの標準の日付と時刻の形式指定子です(つまり、現在のカルチャ設定が考慮されます)。

それは私が繰り返し言ってきたビットです- ユーザーに日付/時刻を表示するとき、それは時刻なしの日付としてフォーマットするときです。

編集:これが機能しない場合は、モデルまたはビューをフォーマット文字列で飾る方法があるはずです-またはそのようなもの。私は実際にはMVCの人ではありませんが、これを宣言的に行うには良い方法があるはずだと感じています...


DateTime.Now.Dateは、日付とともに時刻も表示します。
ZVenue 2011

1
@ZVenue:どこに表示しますか?あなたはしなければならない保管 DateTime値を、そしてあなたがいる場所に日付のみの書式指定子を使用して表示する日付を。指定したコード(モデルのプロパティを設定する)はおそらくストレージ用であるため、深夜0時であってもかまいません。
Jon Skeet

ジョンは私が話していたことを提案し、日付をそのままSQLに保存します。日付を印刷するときに、日付を適切にフォーマットすることができます。
Russ Clarke

2
@ジョン:html.editorfor ....の編集コードを使用すると、このエラーが発生します。「テンプレートは、フィールドアクセス、プロパティアクセス、単一次元配列インデックス、または単一パラメータカスタムインデクサー式でのみ使用できます。」 ...実行時
ZVenue '19

1
@ZVenue:あまりにもこれを見ている:stackoverflow.com/questions/5033902/...
ジョンスキート

8

以下のようにViewModelを変更できます。

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

このソリューションは、Chromeの日付ピッカーの競合の問題も解決します。ViewmodelでDatatype.Dateを指定するだけの場合、Chromeは独自のバージョンの日付ピッカーをテキストボックスで使用します。ありがとうございました!
キャサリン

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は

それは問題です。私はその値をデータベースの日時フィールドに入れています。したがって、これは機能しません。元の投稿を参照してください。
ZVenue 2011

.ToString( "MM / dd / yyyy")にすべきではありませんか?mmは分であり、月ではありません!
ボドリック

@Bodrich:ありがとう、更新されました、私は彼のパターンをコピーして貼り付けます。
Jalalは

4

私はRazorではわかりませんが、ASPXではあなたが行います:

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

Razorにも同様のものが必要です。うまくいけば、これは誰かを助けるでしょう。


1
はい、これはRazor構文でも機能します。たとえば、@ Html.Encode(string.Format( "0:D"、item.Modify_Date))
Ciaran Gallagher

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.ガタール

1

単に日時を変換できます。何かのようなもの:

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

1

このページの他の解決策にいくつか問題があったので、これをドロップします。

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

したがって、2番目のパラメータに「{0:d}」を追加するだけで十分です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.