115 votes

Conversion du format DateTime à l'aide de razor

Quel est le problème avec ce qui suit ?

@Convert.ToDateTime((@item.Date.ToShortDateString())," dd - M - yy")

@item.Date affiche 20/11/2005 12:00 a.m et je veux afficher 20 Nov 2011

1 votes

Les combinaisons des différents formats de date existants peuvent être trouvées ici : msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

283voto

Darin Dimitrov Points 528142

Essayez :

@item.Date.ToString("dd MMM yyyy")

ou vous pouvez utiliser la fonction [DisplayFormat] sur votre modèle de vue :

[DisplayFormat(DataFormatString = "{0:dd MMM yyyy}")]
public DateTime Date { get; set }

et, à votre avis, simplement :

@Html.DisplayFor(x => x.Date)

3 votes

J'ai essayé avec une zone de texte et malheureusement cela n'a pas fonctionné. Existe-t-il un moyen de faire cela pour les zones de texte ?

2 votes

Pour une boîte de texte, il suffit d'utiliser EditorFor au lieu de DisplayFor.

10 votes

N'oubliez pas de définir "ApplyFormatInEditMode = true" dans votre définition de DisplayFormat si vous voulez que le formatage de la date soit appliqué aux éléments EditorFor().

78voto

Miroslav Holec Points 446

C'est la solution :

@item.Published.Value.ToString("dd. MM. yyyy")

Avant ToString() utiliser Valeur .

1 votes

Ce code est correct mais si la colonne date est nulle, il y aura une erreur, essayez donc este

0 votes

Stom a raison, si vous avez des valeurs nulles, vous obtiendrez une erreur, merci pour le lien.

0 votes

Juste ce que je cherchais

33voto

Nick Points 1

Essayez ceci avec MVC 4.0

@Html.TextBoxFor(m => m.YourDate, "{0:dd/MM/yyyy}", new { @class = "datefield form-control", @placeholder = "Enter start date..." })

2 votes

Je ne vois pas pourquoi quelqu'un mettrait un downvote à cette réponse.

0 votes

Je suppose que le vote négatif est dû au fait que cette solution formate la date en "jj/MM/aaaa" au lieu du format "jj MMM aaaa" demandé par l'OP.

1 votes

Celle-ci devrait être la réponse choisie. J'ai essayé les autres et aucune n'a fonctionné.

22voto

Diganta Kumar Points 1467

L'attribut [DisplayFormat] n'est utilisé que dans EditorFor/DisplayFor, et non par les API HTML brutes comme TextBoxFor. J'ai réussi à le faire fonctionner en procédant comme suit,

Modèle :

[Display(Name = "When was that document issued ?")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:d}")]
public DateTime? LiquorLicenceDocumentIssueDate { get; set; }

Vue :

        <div id="IsLiquorLicenceDocumentOnPremisesYes" class="groupLongLabel">
            @Html.LabelFor(m => m.LiquorLicenceDocumentIssueDate)
            <span class="indicator"></span>
            @Html.EditorFor(m => m.LiquorLicenceDocumentIssueDate)
            <span id="validEmail"></span>
            <br />
            @Html.ValidationMessageFor(m => m.LiquorLicenceDocumentIssueDate)
        </div>

Sortie : 30/12/2011

Lien connexe :

http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.displayformatattribute.applyformatineditmode.aspx

1 votes

Vous pouvez également utiliser @string.Format("{0:MM yyyy}", imprint.VersionDate)

5voto

Jules Bartow Points 419

Pour Razor, placez le fichier DateTime.cshtml dans le dossier Views/Shared/EditorTemplates. DateTime.cshtml contient deux lignes et produit une TextBox avec une date formatée 9/11/2001.

@model DateTime?
@Html.TextBox("", (Model.HasValue ? Model.Value.ToShortDateString() : string.Empty), new { @class = "datePicker" })

1 votes

Merci... je n'ai réussi à faire fonctionner aucun des autres. Est-ce que C#/Razor a tellement changé qu'un simple format de date doit passer par tant de choses pour fonctionner ? La réponse la plus suggérée sur Internet : ....ToString("dd MMM yyyy") n'a jamais fonctionné pour moi et j'ai toujours fini par le mettre dans une variable en le convertissant en une date et en sortant ensuite la date. Je savais qu'il devait y avoir une solution qui fonctionnait quelque part.

0 votes

Anthony Griggs, je te comprends. Je suis heureux de partager la douleur pour que nous puissions tous en tirer profit - 6½ ans plus tard !

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