Konwertowanie formatu DateTime przy użyciu maszynki do golenia


Odpowiedzi:


264

Próbować:

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

lub możesz użyć [DisplayFormat]atrybutu w swoim modelu widoku:

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

a Twoim zdaniem po prostu:

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

3
Próbowałem tego z polem tekstowym i niestety nie zadziałało. Czy istnieje sposób na zrobienie tego w przypadku pól tekstowych?
Tobias,

2
W przypadku pola tekstowego po prostu użyj EditorFor zamiast DisplayFor
Brandon シ Renfrow

10
Pamiętaj, aby ustawić „ApplyFormatInEditMode = true” w definicji DisplayFormat, jeśli chcesz, aby formatowanie daty zostało zastosowane do elementów EditorFor ().
Latedeveloper

1
Musiałem użyć tego dla pola DateTime, aby użyć wbudowanego selektora dat. Bez adnotacji DisplayFormat konsola javascript w przeglądarce pokazywałaby coś w rodzaju „Określona wartość '1/1/1990 12:00:00' nie jest zgodna z wymaganym formatem, 'rrrr-MM-dd'." Musiałem ustawić zarówno DataFormatString, jak i ustawić ApplyFormatInEditMode na true, aby błąd zniknął, a wartość była poprawnie wyświetlana podczas używania EditorFor w moim widoku MVC.
Mark

U mnie to działa, ale nie wiem - mam wrażenie, że naruszam separację obaw, stosując logikę do formatowania daty (problemu prezentacji) w modelu za pomocą atrybutu. Rozumiem, że Microsoft spodziewa się, że to zadziała, ale wydaje się, że formatowanie wyświetlania danych powinno być odizolowane od widoku, a model powinien być tylko modelem.
barrypicker

73

To jest rozwiązanie:

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

Przed ToString () użyj wartości .


1
ten kod jest poprawny, ale jeśli kolumna daty jest pusta, spowoduje to błąd, więc spróbuj tego
shaijut

Stom jest poprawny, jeśli masz wartości null wyrzuci Ci błąd, dzięki za link
Nick Kahn

Właśnie tego szukałem
Roger Tello

Wyjątek zerowy można obsłużyć przy użyciu operatora łączenia wartości null - @(item.DOB?.ToString("dd-MMM-yyyy")). Lub za pomocą właściwości HasValue - @(item.DataDate.HasValue ? item.DataDate.Value.Date.ToString("dd MMM yyyy") : null). W obu przypadkach właściwość musi dopuszczać wartość null.
kwazar

31

Spróbuj tego w MVC 4.0

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

2
Nie wiem, dlaczego ktokolwiek miałby przeciwstawić się tej odpowiedzi.
Mikayil Abdullayev

Zakładam, że głos przeciwny wynikał z tego rozwiązania formatującego datę jako „dd / MM / rrrr” zamiast formatu „dd MMM rrrr”, o który prosił OP
PTD

1
To powinna być wybrana odpowiedź. Próbowałem innych i żaden nie działał. dzięki.
Victor Lee

20

Atrybut [DisplayFormat] jest używany tylko w EditorFor / DisplayFor, a nie w surowych interfejsach API HTML, takich jak TextBoxFor. Mam to, wykonując następujące czynności:

Model:

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

Widok:

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

Wyjście: 30/12/2011

Powiązane łącze:

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


1
Alternatywnie możesz również użyć @ string.Format ("{0: MM yyyy}", imprint.VersionDate)
Diganta Kumar,

8

Poniższy kod pomoże Ci

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

4

W przypadku Razor umieść plik DateTime.cshtml w folderze Views / Shared / EditorTemplates. DateTime.cshtml zawiera dwa wiersze i tworzy TextBox z datą sformatowaną 9/11/2001.

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

1
Dziękuję ... nie mogłem zmusić nikogo do pracy. Czy język C # / Razor zmienił się tak bardzo, że prosty format daty musi przejść przez tak wiele rzeczy, aby działał? Najbardziej sugerowana odpowiedź w Internecie: .... ToString ("dd MMM yyyy") nigdy dla mnie nie działało i zawsze kończyło się na umieszczaniu go w zmiennej, konwertowaniu jej na datę, a następnie wypisywaniu daty. Wiedziałem, że musi istnieć jeden liniowiec, który gdzieś działał.
Anthony Griggs

Anthony Griggs, czuję cię, bo. Cieszę się, że mogę dzielić ból, abyśmy wszyscy mogli zyskać - 6,5 roku później!
Jules Bartow

3

Ogólnie miesiąc zapisywany jest zapisywany w formacie MMM, a 4-cyfrowy rok jako rrrr, więc ciąg formatu powinien wyglądać jak „dd MMM rrrr”

DateTime.ToString("dd MMM yyyy")

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

3

Nie udało mi się uruchomić tego całkowicie w oparciu o powyższe sugestie. Wydaje się, [DataType(DataType.Date)]że dołączenie DataTypeAttribute rozwiązało mój problem, zobacz:

Model

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

Widok

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

HTH


1

Dla wszystkich podanych rozwiązań, gdy spróbujesz tego w nowoczesnej przeglądarce (takiej jak FF) i ustawiłeś właściwy model

// 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 render ( typ wejścia jest ustawiony na datę w oparciu o ustawienia daty w modelu!)

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

A przeglądarka pokaże

wprowadź opis obrazu tutaj

Aby to naprawić, musisz zmienić typ na tekst zamiast daty (również jeśli chcesz użyć własnego kalendarza)

@Html.EditorFor(model => model.Start, "{0:dd-MM-yyyy}", new { htmlAttributes = new { @class = "form-control", @type = "text" } })
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.