Conversione del formato DateTime utilizzando razor


Risposte:


264

Provare:

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

oppure potresti utilizzare l' [DisplayFormat]attributo sul tuo modello di visualizzazione:

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

e secondo te semplicemente:

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

3
L'ho provato con una casella di testo e sfortunatamente non ha funzionato. C'è un modo per farlo per le caselle di testo?
Tobias

2
Per una casella di testo basta usare EditorFor invece di DisplayFor
Brandon シ Renfrow

10
Ricordarsi di impostare "ApplyFormatInEditMode = true" nella definizione DisplayFormat se si desidera che la formattazione della data venga applicata agli elementi EditorFor ().
Latedeveloper

1
Avevo bisogno di usarlo per un campo DateTime per poter utilizzare il selettore di date integrato. Senza l'annotazione DisplayFormat, la console javascript nel browser mostrerebbe qualcosa del tipo "Il valore specificato '1/1/1990 12:00:00 AM' non è conforme al formato richiesto, 'yyyy-MM-dd'." Ho dovuto impostare sia DataFormatString che ApplyFormatInEditMode su true affinché l'errore scomparisse e il valore fosse visualizzato correttamente quando si utilizzava EditorFor nella mia vista MVC.
Mark

Questo funziona per me, ma non lo so: ho la sensazione di violare la separazione delle preoccupazioni applicando la logica per formattare una data (una preoccupazione di presentazione) nel modello tramite un attributo. Capisco che questo sia il modo in cui Microsoft si aspetta che funzioni, ma sembra che la formattazione della visualizzazione dei dati dovrebbe essere isolata dalla vista e il modello dovrebbe essere solo un modello.
barrypicker

73

Questa è la soluzione:

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

Prima di ToString () utilizzare Value .


1
questo codice è corretto ma se la colonna della data è nulla, verrà generato un errore, quindi prova questo
shaijut

Stom ha ragione, se hai valori nulli ti verrà generato l'errore, grazie per il link
Nick Kahn

Proprio quello che stavo cercando
Roger Tello

L'eccezione nulla può essere gestita utilizzando l'operatore di coalescenza null - @(item.DOB?.ToString("dd-MMM-yyyy")). O utilizzando la proprietà HasValue - @(item.DataDate.HasValue ? item.DataDate.Value.Date.ToString("dd MMM yyyy") : null). In entrambi i casi la proprietà deve essere datetime nullable.
quasar

31

Prova questo in MVC 4.0

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

2
Non so perché qualcuno dovrebbe sottovalutare questa risposta.
Mikayil Abdullayev

Presumo che il voto negativo sia dovuto a questa soluzione che ha formattato la data come "gg / MM / aaaa" piuttosto che nel formato "gg MMM aaaa" richiesto dall'OP
PTD

1
Questa dovrebbe essere la risposta scelta. Ho provato gli altri e nessuno ha funzionato. grazie.
Victor Lee

20

L'attributo [DisplayFormat] viene utilizzato solo in EditorFor / DisplayFor e non dalle API HTML non elaborate come TextBoxFor. Ho funzionato facendo quanto segue,

Modello:

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

Visualizza:

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

Uscita: 30/12/2011

Link correlato:

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


1
In alternativa, puoi anche utilizzare @ string.Format ("{0: MM yyyy}", imprint.VersionDate)
Diganta Kumar

8

Il codice sottostante ti aiuterà

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

4

Per Razor, inserisci il file DateTime.cshtml nella cartella Views / Shared / EditorTemplates. DateTime.cshtml contiene due righe e produce un TextBox con una data formattata 9/11/2001.

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

1
Grazie ... non sono riuscito a far lavorare nessuno degli altri. C # / Razor è cambiato così tanto in cui un semplice formato di data deve passare attraverso così tante cose per funzionare? La risposta più suggerita su Internet: .... ToString ("dd MMM yyyy") non ha mai funzionato per me e ho sempre finito per inserirla in una variabile convertendola in una data e quindi emettendo la data. Sapevo che doveva esserci un one liner che funzionasse da qualche parte.
Anthony Griggs

Anthony Griggs, ti sento perché. Sono contento di condividere il dolore in modo che tutti noi possiamo guadagnare - 6 anni e mezzo dopo!
Jules Bartow

3

In generale, il mese scritto viene preceduto da MMM, l'anno a 4 cifre come aaaa, quindi la stringa di formato dovrebbe essere "gg MMM aaaa"

DateTime.ToString("dd MMM yyyy")

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

3

Non sono riuscito a farlo funzionare interamente sulla base dei suggerimenti sopra. L'inclusione di DataTypeAttribute [DataType(DataType.Date)]sembrava risolvere il mio problema, vedere:

Modello

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

Visualizza

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

HTH


1

Per tutta la soluzione data, quando lo provi in ​​un browser moderno (come FF) e hai impostato il modello corretto

// 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) renderà (il tipo di input è impostato su data in base alle impostazioni della data nel tuo modello!)

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

E il browser mostrerà

inserisci qui la descrizione dell'immagine

Per risolvere questo problema è necessario modificare il tipo in testo anziché in data (anche se si desidera utilizzare il calendario personalizzato)

@Html.EditorFor(model => model.Start, "{0:dd-MM-yyyy}", new { htmlAttributes = new { @class = "form-control", @type = "text" } })
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.