Conversión de formato de fecha y hora con la maquinilla de afeitar


Respuestas:


264

Tratar:

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

o puede usar el [DisplayFormat]atributo en su modelo de vista:

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

y en su opinión simplemente:

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

3
Intenté esto con un cuadro de texto y lamentablemente no funcionó. ¿Hay alguna forma de hacer esto para los cuadros de texto?
Tobias

2
Para un cuadro de texto, use EditorFor en lugar de DisplayFor
Brandon シ Renfrow

10
Recuerde establecer "ApplyFormatInEditMode = true" en su definición de DisplayFormat si desea que el formato de fecha se aplique a los elementos EditorFor ().
Desarrollador tardío

1
Necesitaba usar esto para un campo DateTime para usar el selector de fecha incorporado. Sin la anotación DisplayFormat, la consola de JavaScript en el navegador mostraría algo como "El valor especificado '1/1/1990 12:00:00 AM' no se ajusta al formato requerido, 'aaaa-MM-dd'". Tuve que configurar tanto DataFormatString como ApplyFormatInEditMode en verdadero para que el error desapareciera y el valor se mostrara correctamente al usar EditorFor en mi vista MVC.
Mark

Esto funciona para mí, pero no sé: tengo la sensación de que estoy violando la separación de preocupaciones al aplicar lógica para formatear una fecha (una preocupación de presentación) en el modelo a través de un atributo. Entiendo que así es como Microsoft espera que funcione, pero parece que el formato de visualización de datos debería aislarse de la vista y el modelo debería ser solo un modelo.
barrypicker

73

Esta es la solución:

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

Antes de ToString () use Value .


1
este código es correcto, pero si la columna de fecha es nula, esto arrojará un error, así que intente esto
shaijut

Stom es correcto, si tiene valores nulos le arrojará el error, gracias por el enlace
Nick Kahn

Justo lo que estaba buscando
Roger Tello

La excepción nula se puede manejar mediante el operador de fusión nula - @(item.DOB?.ToString("dd-MMM-yyyy")). O usando la propiedad HasValue - @(item.DataDate.HasValue ? item.DataDate.Value.Date.ToString("dd MMM yyyy") : null). En ambos casos, la propiedad debe ser datetime que admita valores NULL.
cuásar

31

Prueba esto en MVC 4.0

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

2
No sé por qué alguien rechazaría esta respuesta.
Mikayil Abdullayev,

Supongo que el voto negativo se debió a que esta solución formateó la fecha como "dd / MM / aaaa" en lugar del formato "dd MMM aaaa" que solicitó el OP
PTD

1
Esta debería ser la respuesta elegida. Probé los demás y ninguno funcionó. Gracias.
Victor Lee

20

El atributo [DisplayFormat] solo se usa en EditorFor / DisplayFor, y no en las API de HTML sin procesar como TextBoxFor. Lo hice funcionar haciendo lo siguiente,

Modelo:

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

Ver:

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

Salida: 30/12/2011

Enlace relacionado:

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


1
Alternativamente, también puede usar @ string.Format ("{0: MM aaaa}", imprint.VersionDate)
Diganta Kumar

8

El siguiente código te ayudará

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

4

Para Razor, coloque el archivo DateTime.cshtml en la carpeta Views / Shared / EditorTemplates. DateTime.cshtml contiene dos líneas y produce un TextBox con una fecha formateada el 11/9/2001.

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

1
Gracias ... no pude conseguir que ninguno de los demás trabajara. ¿C # / Razor ha cambiado tanto a un formato de fecha simple que tiene que pasar por tantas cosas para funcionar? La respuesta más sugerida en Internet: .... ToString ("dd MMM aaaa") nunca me ha funcionado y siempre terminaba metiéndolo en una variable convirtiéndolo en una fecha y luego generando la fecha. Sabía que tenía que haber una sola línea que funcionara en alguna parte.
Anthony Griggs

Anthony Griggs, te siento primo. Me alegra compartir el dolor para que todos salgamos ganando, ¡seis años y medio después!
Jules Bartow

3

En general, el mes escrito se escapa como MMM, el año de 4 dígitos como yyyy, por lo que su cadena de formato debe verse como "dd MMM yyyy".

DateTime.ToString("dd MMM yyyy")

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

3

No pude hacer que esto funcionara completamente según las sugerencias anteriores. La inclusión de DataTypeAttribute [DataType(DataType.Date)]pareció resolver mi problema, consulte:

Modelo

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

Ver

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

HTH


1

Para toda la solución dada, cuando pruebe esto en un navegador moderno (como FF), y haya configurado el modelo correcto

// 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) se renderizará (el tipo de entrada se establece hasta la fecha según la configuración de fecha en su modelo)

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

Y el navegador mostrará

ingrese la descripción de la imagen aquí

Para solucionar esto, debe cambiar el tipo a texto en lugar de fecha (también si desea usar su calendario personalizado)

@Html.EditorFor(model => model.Start, "{0:dd-MM-yyyy}", new { htmlAttributes = new { @class = "form-control", @type = "text" } })
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.