Konvertieren des DateTime-Formats mit einem Rasiermesser


Antworten:


264

Versuchen:

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

oder Sie können das [DisplayFormat]Attribut in Ihrem Ansichtsmodell verwenden:

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

und aus Ihrer Sicht einfach:

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

3
Ich habe es mit einem Textfeld versucht und leider hat es nicht funktioniert. Gibt es eine Möglichkeit, dies für Textfelder zu tun?
Tobias

2
Verwenden Sie für ein Textfeld einfach EditorFor anstelle von DisplayFor
Brandon シ Renfrow

10
Denken Sie daran, "ApplyFormatInEditMode = true" in Ihrer DisplayFormat-Definition festzulegen, wenn die Datumsformatierung auf EditorFor () -Elemente angewendet werden soll.
Latedeveloper

1
Ich musste dies für ein DateTime-Feld verwenden, um die integrierte Datumsauswahl zu verwenden. Ohne die DisplayFormat-Annotation würde die Javascript-Konsole im Browser Folgendes anzeigen: "Der angegebene Wert '1/1/1990 00:00:00 AM' entspricht nicht dem erforderlichen Format 'JJJJ-MM-TT'." Ich musste sowohl DataFormatString als auch ApplyFormatInEditMode auf true setzen, damit der Fehler behoben und der Wert bei Verwendung von EditorFor in meiner MVC-Ansicht ordnungsgemäß angezeigt wird.
Mark

Dies funktioniert für mich, aber ich weiß nicht - ich habe das Gefühl, dass ich gegen die Trennung von Bedenken verstoße, indem ich Logik anwende, um ein Datum (ein Präsentationsproblem) im Modell über ein Attribut zu formatieren. Ich verstehe, dass Microsoft dies so erwartet, aber es scheint nur, dass die Formatierung der Datenanzeige auf die Ansicht beschränkt sein sollte und das Modell nur ein Modell sein sollte.
Barrypicker

73

Das ist Lösung:

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

Vor ToString () Verwendung Wert .


1
Dieser Code ist korrekt, aber wenn die
Datumsspalte

Stom ist richtig, wenn Sie Nullwerte haben, wird Ihnen der Fehler angezeigt, danke für den Link
Nick Kahn

Genau das, wonach ich gesucht habe
Roger Tello

Null-Ausnahmen können mit dem Null-Koaleszenz-Operator - behandelt werden @(item.DOB?.ToString("dd-MMM-yyyy")). Oder mithilfe der HasValue-Eigenschaft - @(item.DataDate.HasValue ? item.DataDate.Value.Date.ToString("dd MMM yyyy") : null). In beiden Fällen muss die Eigenschaft datetime nullbar sein.
Quasar

31

Versuchen Sie dies in MVC 4.0

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

2
Ich weiß nicht, warum jemand diese Antwort ablehnen sollte.
Mikayil Abdullayev

Ich würde annehmen, dass die Abwertung auf diese Lösung zurückzuführen ist, bei der das Datum als "TT / MM / JJJJ" und nicht als das vom OP angeforderte Format "TT MMM JJJJ" formatiert wurde
PTD

1
Dies sollte die gewählte Antwort sein. Ich habe es mit den anderen versucht und keiner hat funktioniert. Vielen Dank.
Victor Lee

20

Das Attribut [DisplayFormat] wird nur in EditorFor / DisplayFor verwendet und nicht von den unformatierten HTML-APIs wie TextBoxFor. Ich habe es funktioniert, indem ich Folgendes getan habe:

Modell:

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

Aussicht:

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

Ausgabe: 30/12/2011

Weiterführender Link:

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


1
Alternativ können Sie auch @ string.Format ("{0: MM yyyy}", imprint.VersionDate)
Diganta Kumar

8

Der folgende Code hilft Ihnen dabei

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

4

Legen Sie für Razor die Datei DateTime.cshtml im Ordner Views / Shared / EditorTemplates ab. DateTime.cshtml enthält zwei Zeilen und erstellt eine TextBox mit einem Datum, das am 11.9.2001 formatiert ist.

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

1
Danke ... konnte keinen der anderen zum Arbeiten bringen. Hat sich C # / Razor so sehr dahingehend geändert, dass ein einfaches Datumsformat so viele Dinge durchlaufen muss, um zu funktionieren? Die am häufigsten vorgeschlagene Antwort im Internet: .... ToString ("TT MMM JJJJ") hat bei mir nie funktioniert, und ich hatte es immer in eine Variable gestopft, die es in ein Datum konvertierte und dann das Datum ausgab. Ich wusste, dass es irgendwo einen Einzeiler geben musste.
Anthony Griggs

Anthony Griggs, ich fühle dich, weil. Ich bin froh, den Schmerz zu teilen, damit wir alle gewinnen können - 6½ Jahre später!
Jules Bartow

3

Im Allgemeinen wird der geschriebene Monat als MMM maskiert, das 4-stellige Jahr als JJJJ, sodass Ihre Formatzeichenfolge wie "TT MMM JJJJ" aussehen sollte.

DateTime.ToString("dd MMM yyyy")

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

3

Ich konnte dies aufgrund der obigen Vorschläge nicht vollständig zum Laufen bringen. Das Einschließen des DataTypeAttribute [DataType(DataType.Date)]schien mein Problem zu lösen, siehe:

Modell

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

Aussicht

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

HTH


1

Für alle gegebenen Lösungen, wenn Sie dies in einem modernen Browser (wie FF) versuchen und das richtige Modell eingestellt haben

// 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) wil machen (die Art des Eingangs einstellen Datum auf der Grundlage Ihrer Datumseinstellungen in Ihrem Modell!)

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

Und der Browser wird anzeigen

Geben Sie hier die Bildbeschreibung ein

Um dies zu beheben, müssen Sie den Typ in Text anstelle von Datum ändern (auch wenn Sie Ihren benutzerdefinierten Kalender verwenden möchten).

@Html.EditorFor(model => model.Start, "{0:dd-MM-yyyy}", new { htmlAttributes = new { @class = "form-control", @type = "text" } })
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.