web-dev-qa-db-fra.com

N'afficher que la date et pas l'heure

Dans le rasoir MVC, je mets la date actuelle dans la base de données comme ceci.

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

Étant donné que le champ de base de données est un type de données datetime et que je convertis la date en cours au format chaîne, cela ne fonctionne pas. Comment puis-je procéder? Je fais le format de chaîne parce que je veux la date au format mm/jj/aaaa et non au format mm/jj/aaaa hh: mm: ss format heure ..

MODIFIER:

Dans le contrôleur j'ai

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

Dans la vue partielle, j'ai

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

C’est là que sa date et sa date sont affichées ensemble. Pas le temps. J'espère que cette édition explique mieux.

87
ZVenue

Si le type de colonne est DateTime en SQL, il enregistre l'heure à laquelle vous en passez une ou non.

Il serait préférable de réserver la date correctement:

model.ReturnDate = DateTime.Now;

puis formatez-le lorsque vous avez besoin de l'afficher:

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

Ou si vous utilisez EditorFor:

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

ou

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

Pour ajouter une propriété à votre modèle, ajoutez ce code:

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

Puis dans votre PartialView:

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

MODIFIER:

Bonjour les gars, je veux juste clarifier cette réponse en disant "Si vous utilisez EditorFor", cela signifie que vous devez avoir un modèle EditorFor pour le type de valeur que vous essayez de représenter.

Les modèles d'éditeur sont un moyen intéressant de gérer des contrôles répétitifs dans MVC:

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

Vous pouvez les utiliser pour des types naïfs comme String, comme je l’ai déjà fait; mais ils sont particulièrement intéressants pour vous permettre de modéliser un ensemble de champs de saisie pour un type de données plus complexe.

94
Russ Clarke

Je viens de faire face à ce scénario moi-même - j'ai trouvé un moyen très simple de le faire, il suffit d'annoter votre propriété dans le modèle comme ceci:

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

Cela masquera aussi le bouton de l'heure du sélecteur de date.

Désolé si cette réponse est un peu tardive;)

121
Lazy Dave

Cela fonctionne si vous voulez afficher dans une zone de texte:

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

La date/heure dans la base de données ne sera pas du tout une version formatée . Ce sera juste la date/heure elle-même. La façon dont vous affiche cette date/heure lorsque vous extrayez la valeur de la base de données est une autre affaire. Je soupçonne fortement que vous voulez vraiment juste:

model.Returndate = DateTime.Now.Date;

ou éventuellement

model.Returndate = DateTime.UtcNow.Date;

Oui, si vous examinez la base de données à l'aide de SQL Server Studio ou autre, vous verrez maintenant minuit - mais ce n'est pas pertinent, et lorsque vous extrayez la date de la base de données et que vous l'affichez à un utilisateur, alors vous pouvez appliquer le format approprié.

EDIT: En ce qui concerne votre question modifiée, le problème ne vient pas du modèle, mais de la manière dont vous spécifiez la vue. Vous devriez utiliser quelque chose comme:

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

d est le spécificateur de format de date et d'heure standard pour le modèle de date courte (ce qui signifie que les paramètres culturels actuels seront pris en compte).

C’est le peu que j’ai répété à maintes reprises - que lorsque vous affichez la date/heure à l’utilisateur , c’est le moment de la formater en tant que date sans un temps.

EDIT: Si cela ne fonctionne pas, il devrait y avoir un moyen de décorer le modèle ou la vue avec une chaîne de format - ou quelque chose comme ça. Je ne suis pas vraiment une personne de MVC, mais il me semble que devrait être un bon moyen de le faire de manière déclarative ...

16
Jon Skeet

Vous pouvez modifier votre ViewModel comme suit:

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

Vous pouvez appliquer un format de date et heure personnalisé en utilisant ToString comme:

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

Vous trouverez d'autres informations sur le modèle de formats DateTime.ToString _ ici et ici .

Modifier: Après avoir modifié votre question, procédez comme pour les autres que vous proposez d'appliquer le format de date à votre vue:

model.Returndate = DateTime.Now.Date;

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

Je ne suis pas sûr dans Razor mais dans ASPX vous le faites:

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

Il doit y avoir quelque chose de similaire dans Razor. J'espère que cela aidera quelqu'un.

4
G Jeny Ramirez

Si vous avez une boucle for telle que celle ci-dessous.

Remplacez @ item.StartDate par @ item.StartDate.Value.ToShortDateString ()

Cela supprimera le temps au cas où vous ne pouvez pas annoter votre propriété dans le modèle, comme dans mon cas.

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

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

Votre date de facturation s'affichera comme suit.

enter image description here

2
Pradip Rupareliya

Vous pouvez simplement convertir le datetime. Quelque chose comme:

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

J'ai eu quelques problèmes avec les autres solutions sur cette page, alors j'ai pensé laisser tomber ceci.

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

Il vous suffit donc d’ajouter "{0: d}" au deuxième paramètre et vous devriez être prêt à partir.

1
Lee