Conversion du format DateTime à l'aide de rasoir


Réponses:


264

Essayer:

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

ou vous pouvez utiliser l' [DisplayFormat]attribut 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
J'ai essayé cela avec une zone de texte et malheureusement cela n'a pas fonctionné. Existe-t-il un moyen de le faire pour les zones de texte?
Tobias

2
Pour une zone de texte, utilisez simplement EditorFor au lieu de DisplayFor
Brandon シ Renfrow

10
N'oubliez pas de définir "ApplyFormatInEditMode = true" dans votre définition DisplayFormat si vous souhaitez que la mise en forme de la date soit appliquée aux éléments EditorFor ().
Développeur tardif

1
J'avais besoin de l'utiliser pour un champ DateTime afin d'utiliser le sélecteur de date intégré. Sans l'annotation DisplayFormat, la console javascript dans le navigateur afficherait quelque chose comme "La valeur spécifiée '1/1/1990 12:00:00 AM' n'est pas conforme au format requis, 'aaaa-MM-jj'." J'ai dû définir à la fois le DataFormatString et définir ApplyFormatInEditMode sur true pour que l'erreur disparaisse et que la valeur s'affiche correctement lorsque vous utilisez EditorFor dans ma vue MVC.
Mark

Cela fonctionne pour moi, mais je ne sais pas - j'ai le sentiment de violer la séparation des préoccupations en appliquant une logique pour formater une date (un problème de présentation) dans le modèle via un attribut. Je comprends que c'est ainsi que Microsoft s'attend à ce que cela fonctionne, mais il semble simplement que le formatage de l'affichage des données doit être isolé de la vue et que le modèle ne doit être qu'un modèle.
barrypicker le

73

Voici la solution:

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

Avant ToString (), utilisez Value .


1
ce code est correct mais si la colonne de date est nulle, cela
générera une

Stom est correct, si vous avez des valeurs nulles vous jettera l'erreur, merci pour le lien
Nick Kahn

Juste ce que je cherchais
Roger Tello

Une exception nulle peut être gérée à l'aide de l'opérateur de fusion nul - @(item.DOB?.ToString("dd-MMM-yyyy")). Ou en utilisant la propriété HasValue - @(item.DataDate.HasValue ? item.DataDate.Value.Date.ToString("dd MMM yyyy") : null). Dans les deux cas, la propriété doit être datetime Nullable.
quasar

31

Essayez ceci dans MVC 4.0

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

2
Je ne sais pas pourquoi quelqu'un refuserait cette réponse.
Mikayil Abdullayev

Je suppose que le vote défavorable était dû à cette solution mettant en forme la date comme "jj / MM / aaaa" plutôt que le format "jj MMM aaaa" demandé par l'OP
PTD

1
Celui-ci devrait être la réponse choisie. J'ai essayé les autres et aucun n'a fonctionné. THX.
Victor Lee

20

L'attribut [DisplayFormat] n'est utilisé que dans EditorFor / DisplayFor, et non par les API HTML brutes telles que TextBoxFor. Je l'ai fait fonctionner en faisant ce qui 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
Vous pouvez également utiliser @ string.Format ("{0: MM yyyy}", imprint.VersionDate)
Diganta Kumar

8

Le code ci-dessous vous aidera

@Html.Label(@item.Date.Value.ToString("dd - M - yy"))

4

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

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

1
Merci ... je n'ai pas réussi à faire travailler les autres. C # / Razor a-t-il tellement changé pour qu'un simple format de date doive passer par tant de choses pour fonctionner? La réponse la plus suggérée sur Internet: .... ToString ("jj MMM aaaa") n'a jamais fonctionné pour moi et j'avais toujours fini par le mettre dans une variable en le convertissant en une date et en sortant la date. Je savais qu'il devait y avoir une seule ligne qui fonctionnait quelque part.
Anthony Griggs

Anthony Griggs, je te sens cuz. Heureux de partager la douleur pour que nous puissions tous gagner - 6 ans et demi plus tard!
Jules Bartow

3

En général, le mois écrit est échappé comme MMM, l'année à 4 chiffres comme aaaa, donc votre chaîne de format doit ressembler à "jj MMM aaaa"

DateTime.ToString("dd MMM yyyy")

@ ViewBag.PurchaseInfo.LastPurchaseTime.ToString ("dd.MM.yyyy")
yonexbat

3

Je n'ai pas été en mesure de faire fonctionner cela entièrement sur la base des suggestions ci-dessus. L'inclusion de DataTypeAttribute a [DataType(DataType.Date)]semblé résoudre mon problème, voir:

Modèle

[Required]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
public DateTime RptDate { get; set; }

Vue

@Html.EditorFor(m => m.CLPosts.RptDate)

HTH


1

Pour toute la solution donnée, lorsque vous essayez ceci dans un navigateur moderne (comme FF) et que vous avez défini le bon modèle

// Model
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}", ApplyFormatInEditMode = true)]
public DateTime Start { get; set; }

// View
<div class="form-group">
    @Html.LabelFor(model => model.Start, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.EditorFor(model => model.Start, "{0:dd-MM-yyyy}", new { htmlAttributes = new { @class = "form-control"} })
    </div>
</div>

mvc (5) sera rendu (le type d'entrée est défini sur la date en fonction de vos paramètres de date dans votre modèle!)

<div class="col-md-10">
<input class="form-control text-box single-line" data-val="true" data-val-date="The field Start must be a date." data-val-required="The Start field is required." id="Start" name="Start" value="01-05-2018" type="date">
        <span class="field-validation-valid text-danger" data-valmsg-for="Start" data-valmsg-replace="true"></span>
</div>

Et le navigateur affichera

entrez la description de l'image ici

Pour résoudre ce problème, vous devez changer le type en texte au lieu de date (également si vous souhaitez utiliser votre calendrier personnalisé)

@Html.EditorFor(model => model.Start, "{0:dd-MM-yyyy}", new { htmlAttributes = new { @class = "form-control", @type = "text" } })
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.