Yalnızca tarihi görüntüleyin, saati göstermeyin


95

MVC tıraş makinesinde, veri tabanına şu şekilde güncel tarih koyuyorum ..

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

Veritabanı alanı bir tarih saat veri türü olduğundan ve şu anki tarihi dize biçimine dönüştürüyorum, bu çalışmıyor .. Bunu nasıl yapabilirim? Dize biçimini yapıyorum çünkü tarihi aa / gg / yyyy biçiminde istiyorum ve aa / gg / yyyy hh: mm: ss saat biçiminde değil ..

DÜZENLE:

Denetleyicide var

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

Kısmi görünümde,

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

Tarihi ve Saati birlikte görüntülediği yer burası ... Sadece tarihin görüntülenmesini istiyorum. Zamanı değil. Umarım bu düzenleme daha iyi açıklar.


1
00:00:00 (gece yarısı) için endişelenmeyin. Tam ToString("mm/dd/yyyy");olarak ne istediğinizi görebilmek için çıktıyı biçimlendirmeniz yeterlidir.
Chase Florell

1
Verileri veritabanına olarak kaydedin DateTime. OUTPUT'ta dize biçimlendirmesini yaparsınız ... Yalnızca son görüntüleyiciye göre biçimlendirin.
Chase Florell

Yanıtlar:


97

Sütun türü SQL'de DateTime ise, birini geçip geçmediğiniz bir zamanı kaydedecektir.

Tarihi doğru bir şekilde kaydetmek daha iyi olur:

model.ReturnDate = DateTime.Now;

ve sonra görüntülemeniz gerektiğinde biçimlendirin:

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

Veya EditorFor kullanıyorsanız:

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

veya

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

Modelinize bir mülk eklemek için şu kodu ekleyin:

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

Ardından PartialView'unuzda:

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

DÜZENLE:

Merhaba arkadaşlar, bu yanıtı açıklığa kavuşturmak istiyorum, 'EditorFor kullanıyorsanız, bu, temsil etmeye çalıştığınız değer türü için bir EditorFor şablonuna ihtiyacınız olduğu anlamına geliyor.

Düzenleyici şablonları, MVC'de tekrarlayan kontrolleri yönetmenin harika bir yoludur:

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

Bunları yukarıda yaptığım gibi String gibi saf tipler için kullanabilirsiniz; ancak özellikle daha karmaşık bir veri türü için bir dizi giriş alanını şablonlamanıza izin vermek için harikadırlar.


bunu kimin reddettiğinden emin değilim .. ama bunu görüntülemek için HTML.label kullanmıyorum .. HTML.EditorFor (model => model.Returndate) kullanıyorum bu durumda ekranı nasıl biçimlendirebilirim ...
ZVenue

Bu sadece sonucunuzu nasıl biçimlendireceğinize dair bir örnekti; Cevabımı güncelleyeceğim.
Russ Clarke

14
@Russ: Yaptığınız güncellemenin düzenleyicisi çalışmadı. Bu bana bir hata veriyor "Şablonlar yalnızca alan erişimi, özellik erişimi, tek boyutlu dizi dizini veya tek parametreli özel dizin oluşturucu ifadeleri ile kullanılabilir."
ZVenue

1
Cevabıma ekleyeceğim
Russ Clarke

19
yanıttan '@ Html.EditorFor (model => model.ReturnDate.ToShortDateString ())' öğesini kaldırmanız gerekir çünkü bu işe yaramaz.
James Reategui

131

Sadece bu senaryoyu kendim halletmem gerekiyordu - bunu yapmanın gerçekten kolay bir yolunu buldum, mülkünüze modelde şu şekilde açıklama ekleyin:

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

Tarih seçiciden saat düğmesini de gizleyecektir.

Bu cevap biraz geç kaldıysa özür dilerim;)


Çok teşekkürler. Benim için çok faydalı bir gönderiydi! +1
Dmytro

1
Tam ihtiyacım olan şey. Mükemmel!
RealityDysfunction

1
Son zamanlarda, girdi türü tarih olduğunda, html5'in bir parçası olarak chrome'un komik şeyler koyduğu bir durum yaşadım, bunun yerine jquery datepicker'ı kullanmak istedim, bu yüzden DataType.Text ile gittim - bu hala yeterince havalı biçimlendirmeyi kullanmama izin verdi
John

2
Geç kaldığım için özür dilemeye gerek yok, eski sorulara cevap yazmak, OP olmayan insanlar için çok yardımcı olabilir. Mümkün olduğunu bildiğim ama nasıl olduğunu hatırlayamadığım için aradığım cevap buydu ve siz 3 yıl önce gönderdiniz. Herhangi bir şey olursa, inanılmaz erken geldin.
RyanfaeScotland

tarih bir veritabanından geliyorsa bunun nasıl yardımcı olabileceğini bilmiyorum ...
Antoine Pelletier

41

Bu, bir TextBox içinde görüntülemek istiyorsanız çalışır:

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

tarayıcı ayarlarında "gg-AA-yyyy" den farklı bir biçime sahipse, tarih yanlış gösterilecektir, yani "MM-gg-yyyy"
Oleg Sh

16

Veri tabanındaki tarih / saat formatlanmış bir versiyon olmayacak . Sadece tarih / saatin kendisi olacak. Veritabanından değeri çıkardığınızda bu tarihi / saati nasıl görüntülediğiniz farklı bir konudur. Gerçekten sadece şunu istediğinden şüpheleniyorum:

model.Returndate = DateTime.Now.Date;

veya muhtemelen

model.Returndate = DateTime.UtcNow.Date;

SQL Server Studio ya da her türlü kullanarak veritabanında bakarsanız Evet, artık gece yarısını görürsünüz - ama bu alakasız ve sen veritabanının tarihini alıp bir kullanıcıya görüntüler zaman, o alakalı biçimi uygulayabilirsiniz .

DÜZENLEME: Düzenlenen sorunuzla ilgili olarak, sorun modelde değil - görünümü nasıl belirttiğinizdir. Aşağıdaki gibi bir şey kullanmalısınız:

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

nerede dolduğu standart tarih ve saat biçim belirteci (Bu dikkate mevcut kültürel ayarları alacağım anlamına gelir) kısa tarih desenini.

Tekrar tekrar söylediğim şey bu - kullanıcıya tarih / saati görüntülediğinizde, onu saat olmadan tarih olarak biçimlendirme zamanıdır.

DÜZENLEME: Bu işe yaramazsa, modeli veya görünümü bir biçim dizesiyle veya buna benzer bir şekilde dekore etmenin bir yolu olmalıdır. Ben gerçekten bir MVC çalışanı değilim, ancak bunu açıklayıcı bir şekilde yapmanın iyi bir yolu olmalı gibi geliyor ...


DateTime.Now.Date, tarihle birlikte saati hala görüntüler.
ZVenue

1
@ZVenue: Nerede gösteriyor? Sen edilmelidir depolayan bir DateTime değeri ve bulundukları her yerden tarih salt biçim belirteci kullanarak görüntüleyen tarih. Verdiğiniz kod (modelde bir özellik belirleme) muhtemelen depolama içindir, bu nedenle gece yarısı olması önemli değildir.
Jon Skeet

Jon, ne hakkında konuştuğumu öneriyor, tarihi olduğu gibi SQL'e kaydediyor; daha sonra tarihinizi yazdırdığınızda uygun şekilde biçimlendirebilirsiniz.
Russ Clarke

2
@Jon: html.editorfor .... için düzenleme kodunu kullandığımda bu hatayı alıyorum. "Şablonlar yalnızca alan erişimi, özellik erişimi, tek boyutlu dizi dizini veya tek parametreli özel dizin oluşturucu ifadeleriyle kullanılabilir". ... çalışma zamanında
ZVenue

1
@ZVenue: Şuna da bir göz atın: stackoverflow.com/questions/5033902/…
Jon Skeet

8

ViewModel'inizi aşağıdaki gibi değiştirebilirsiniz:

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

Bu çözüm aynı zamanda Chrome'un tarih seçici çakışması sorununu da çözer. Viewmodel'de Datatype.Date'i yalnızca belirtirseniz Chrome, metin kutusunda kendi veri seçici sürümünü kullanır. Teşekkür ederim!
Katherine

7

Aşağıdakileri kullanarak özel tarih ve saat biçimi uygulayabilirsiniz ToString:

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

Biçim DateTime.ToStringörüntüsü hakkında daha fazla bilgi burada ve burada bulunabilir .

Düzenleme: Soru düzenlemenizden sonra, tıpkı diğer önerilenlere benzer şekilde, tarih biçimini görünümünüze uygulamanız gerekir:

model.Returndate = DateTime.Now.Date;

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

1
bu, tarihi kaydetme sorununa yardımcı olmaz.
Russ Clarke

Aramakla kurtaramaz model.Returndate.ToString("mm/dd/yyyy")mı?
Jalal Said

Bu bir sorun .. Bu değeri db'deki bir datetime alanına koyuyorum. Yani bu işe yaramayacak .. lütfen orijinal yazıma bakın.
ZVenue

.ToString ("AA / gg / yyyy") olması gerekmez mi? mm dakikadır, ay değil!
Bodrick

@Bodrich: teşekkürler, güncellendi, yine de kalıbını kopyalayıp yapıştırıyorum.
Jalal Said

4

Razor'da emin değilim ama ASPX'te şunları yaparsınız:

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

Razor'da benzer bir şey olmalı. Umarım bu birine yardımcı olur.


1
Evet, bu Razor sözdiziminde de çalışır, örneğin @ Html.Encode (string.Format ("0: D", item.Modify_Date))
Ciaran Gallagher

4

Aşağıdaki gibi bir for döngüsüne sahipseniz.

@ İtem.StartDate'i @ item.StartDate.Value.ToShortDateString () olarak değiştirin

Bu, benim durumumda olduğu gibi mülkünüze modelde açıklama ekleyememeniz durumunda zamanı kaldıracaktır.

<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

İstenilen çıktıyı elde etmek için DisplayFormat ve ApplyFormatInEditMode gibi Veri Ek Açıklamalarını dahil edin.

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

Şimdi fatura tarihiniz gibi görünecek.

görüntü açıklamasını buraya girin


Lütfen diğer cevaplara bir göz atın. Sizinkinin gerekli olduğunu ve gönderiye bazı yeni kaliteli içerikler eklediğini düşünüyor musunuz?
L. Guthardt

1

Tarih saatini basitçe dönüştürebilirsiniz. Gibi bir şey:

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

1

Bu sayfadaki diğer çözümlerle ilgili bazı problemlerim vardı, bu yüzden bunu bırakayım dedim.

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

Bu nedenle, ikinci parametreye yalnızca "{0: d}" eklemeniz gerekir ve gitmeniz iyi olur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.