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.