101 votes

Afficher uniquement la date et non l'heure

Dans MVC razor, je mets la date du jour dans la base de données comme ceci

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

Comme le champ de la base de données est un type de données de type date et que je convertis la date actuelle au format chaîne, cela ne fonctionne pas comment puis-je faire ? Je fais le format chaîne de caractères parce que je veux que la date soit au format mm/dd/yyyy et non au format mm/dd/yyyy hh:mm:ss

EDIT :

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à qu'il affiche la date comme date et heure ensemble... Je veux que seule la date soit affichée. Pas l'heure. J'espère que cette modification est plus explicite.

2 votes

Ne vous inquiétez pas pour le 00:00:00 (minuit). Formatez simplement la sortie ToString("mm/dd/yyyy"); pour être en mesure de voir exactement ce que vous voulez.

1 votes

Sauvegarder les données dans la base de données en tant que DateTime . Vous effectuez le formatage de la chaîne de caractères sur la SORTIE ... Seulement le formatage pour le spectateur final.

139voto

Lazy Dave Points 311

J'ai eu à faire face à ce scénario moi-même - j'ai trouvé un moyen très simple de le faire, en annotant simplement votre propriété dans le modèle comme ceci :

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

Le bouton de l'heure sera également masqué dans le sélecteur de date.

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

0 votes

Merci beaucoup. C'était un post très utile pour moi ! +1

3 votes

Juste ce dont j'avais besoin. Excellent !

1 votes

J'ai eu une situation récemment où chrome mettait des trucs bizarres quand le type d'entrée était une date, une partie de html5 je pense, je voulais utiliser jquery datepicker à la place donc je suis allé avec DataType.Text - qui m'a permis d'utiliser le formatage assez cool.

105voto

Russ C Points 8403

Si le type de colonne est DateTime en SQL, il stockera une heure, que vous passiez une heure ou non.

Ce serait mieux d'enregistrer la date correctement :

model.ReturnDate = DateTime.Now;

puis de le formater 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)

EDIT :

Je veux juste préciser pour cette réponse que si je dis "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 efficace de gérer les 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 tels que String, comme je l'ai fait ci-dessus, mais ils sont particulièrement utiles pour vous permettre de modéliser un ensemble de champs de saisie pour un type de données plus complexe.

0 votes

Je ne sais pas qui a rétrogradé ce message... mais je n'utilise pas le HTML.label pour afficher ceci... J'utilise HTML.EditorFor(model => model.Returndate) comment puis-je formater l'affichage dans ce cas...

0 votes

C'était juste un exemple de la façon de formater votre résultat ; je vais mettre à jour ma réponse.

0 votes

Je pense que si la valeur est logiquement seulement une date, il vaut la peine de ne stocker que la partie date, même si l'heure sera de toute façon dépouillée à l'affichage.

42voto

Brij Points 1149

Cela fonctionne si vous voulez afficher dans une TextBox :

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

0 votes

La date sera affichée de manière incorrecte si le navigateur a un format différent de "dd-MM-yyyy" dans ses paramètres, c'est-à-dire "MM-dd-yyyy".

17voto

Jon Skeet Points 692016

La date/heure dans la base de données ne sera pas une formaté version du tout. Ce sera juste la date/heure elle-même. Comment afficher la date/heure à laquelle vous extrayez la valeur de la base de données est une autre question. Je soupçonne fortement que vous voulez juste :

model.Returndate = DateTime.Now.Date;

ou éventuellement

model.Returndate = DateTime.UtcNow.Date;

Oui, si vous regardez la base de données à l'aide de SQL Server Studio ou d'un autre outil, vous verrez minuit, mais cela n'a pas d'importance, et lorsque vous récupérez la date dans la base de données et l'affichez à un utilisateur, puis 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 façon dont vous spécifiez la vue. Vous devriez utiliser quelque chose comme :

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

d est le spécification du format standard de la date et de l'heure pour le modèle de date courte (ce qui signifie qu'il prendra en compte les paramètres culturels actuels).

C'est ce que j'ai dit à plusieurs reprises - que lorsque vous afficher la date et l'heure à l'utilisateur c'est le moment de le formater comme une date sans heure.

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 MVC, mais j'ai l'impression qu'il y a devrait pour être un bon moyen de faire cela de manière déclarative...

0 votes

La fonction DateTime.Now.Date affiche toujours l'heure en même temps que la date.

1 votes

@ZVenue : L'affiche où ? Vous devriez être stockage de une valeur DateTime, et en utilisant un spécificateur de format de date uniquement partout où vous en affichant la date. Le code que vous avez donné (définition d'une propriété dans le modèle) est vraisemblablement destiné au stockage, donc il importe peu que l'heure soit de minuit.

0 votes

Jon suggère ce dont je parlais, en sauvegardant la date en SQL telle quelle ; vous pouvez alors simplement formater votre date de manière appropriée lorsque vous l'imprimez.

7voto

Jalal Aldeen Saa'd Points 9120

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

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

Pour en savoir plus DateTime.ToString Le modèle de format peut être trouvé ici et ici .

Edit : Après l'édition de votre question, tout comme les autres suggestions, vous devez appliquer le format de date à votre vue :

model.Returndate = DateTime.Now.Date;

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

1 votes

Mais cela n'aidera pas à sauver la date.

0 votes

Il ne peut pas le sauver en appelant model.Returndate.ToString("mm/dd/yyyy") ?

0 votes

C'est un problème Je mets cette valeur dans un champ de date dans la base de données. Donc, cela ne fonctionnera pas veuillez consulter mon message original.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X