केवल दिनांक और कोई समय प्रदर्शित करें


91

MVC रेजर में, मैं इस तरह से डेटाबेस में वर्तमान तिथि डाल रहा हूँ।

model.Returndate = DateTime.Now.Date.ToShortDateString();

चूंकि डेटाबेस फ़ील्ड एक डेटाटाइम डेटाटाइप है और मैं वर्तमान दिनांक को स्ट्रिंग प्रारूप में परिवर्तित कर रहा हूं, यह काम नहीं कर रहा है .. मैं यह कैसे कर सकता हूं? मैं स्ट्रिंग प्रारूप इसलिए कर रहा हूं क्योंकि मुझे mm / dd / yyyy प्रारूप में तारीख चाहिए और mm / dd / yyyy hh: mm: ss time format में नहीं ..

संपादित करें:

नियंत्रक में मेरे पास है

var model = new ViewModel();
model.ReturnDate = DateTime.Now;            
return PartialView("PartialView", model);  

आंशिक रूप में, मेरे पास है

@Html.EditorFor(model => model.Returndate)

यह वह जगह है जहाँ दिनांक और समय को दिनांक के रूप में प्रदर्शित किया जाता है ... मैं चाहता हूं कि केवल दिनांक प्रदर्शित हो। समय नहीं है। मुझे उम्मीद है कि यह संपादन बेहतर तरीके से समझाएगा।


1
00:00:00 (मध्यरात्रि) के बारे में चिंता न करें। बस आउटपुट ToString("mm/dd/yyyy");को प्रारूपित करें ताकि आप जो चाहें देख सकें।
चेस फ्लोरल

1
डेटाबेस में डेटा को इस रूप में सहेजें DateTime। आप OUTPUT पर स्ट्रिंग स्वरूपण करते हैं ... केवल इसे अंतिम दर्शक के लिए प्रारूपित करते हैं।
चेस फ्लोरल

जवाबों:


96

यदि SQL में कॉलम प्रकार DateTime है तो यह एक समय संग्रहीत करेगा जहां आप एक पास करते हैं या नहीं।

दिनांक को ठीक से सहेजना बेहतर होगा:

model.ReturnDate = DateTime.Now;

और तब इसे प्रारूपित करें जब आपको इसे प्रदर्शित करने की आवश्यकता हो:

@Html.Label(Model.ReturnDate.ToShortDateString())

या यदि आप EditorFor का उपयोग कर रहे हैं:

@Html.EditorFor(model => model.ReturnDate.ToShortDateString())

या

@Html.EditorFor(model => model.ReturnDate.ToString("MM/dd/yyyy"))

अपने मॉडल में एक संपत्ति जोड़ने के लिए इस कोड को जोड़ें:

public string ReturnDateForDisplay
{
    get
    {
       return this.ReturnDate.ToString("d");
    }
}

फिर आपके आंशिक दृश्य में:

@Html.EditorFor(model => model.ReturnDateForDisplay)

संपादित करें:

हाय दोस्तों, बस इस जवाब के लिए स्पष्ट करना चाहता हूं कि मेरे कहने से 'यदि आप EditorFor का उपयोग कर रहे हैं', तो इसका मतलब है कि आपको जिस प्रकार के मान का प्रतिनिधित्व करने की कोशिश कर रहे हैं, उसके लिए EditorFor टेम्पलेट होना आवश्यक है।

संपादक टेम्पलेट MVC में दोहराव नियंत्रण का एक अच्छा तरीका है:

http://coding-in.net/asp-net-mvc-3-how-to-use-editortemplates/

जैसा कि मैंने ऊपर किया है, आप उन्हें स्ट्रिंग जैसे भोले प्रकारों के लिए उपयोग कर सकते हैं; लेकिन वे आपको अधिक जटिल डेटा प्रकार के लिए इनपुट फ़ील्ड का एक सेट टेम्पलेट देने के लिए विशेष रूप से महान हैं।


निश्चित नहीं है कि किसने इसे डाउनवोट किया है .. लेकिन मैं इसे प्रदर्शित करने के लिए HTML.label का उपयोग नहीं कर रहा हूं .. मैं HTML.EditorFor (मॉडल => model.Returndate) का उपयोग कर रहा हूं मैं इस मामले में प्रदर्शन को कैसे प्रारूपित करूं ...
ZVVue

यह सिर्फ एक उदाहरण था कि कैसे अपने परिणाम को प्रारूपित करें; मैं अपना जवाब अपडेट करूंगा।
रस क्लार्क

14
@Russ: आपके द्वारा किया गया संपादकीय अद्यतन काम नहीं आया। इसकी एक त्रुटि मुझे दे रही है "टेम्प्लेट का उपयोग केवल फील्ड एक्सेस, प्रॉपर्टी एक्सेस, सिंगल-डायमेंशन एरे इंडेक्स या सिंगल-पैरामीटर कस्टम इंडेक्सर एक्सप्रेशंस के साथ किया जा सकता है।"
ZVenue

1
मैं इसे अपने उत्तर में
जोड़ूंगा

19
आपको उत्तर देने से '@ Html.EditorFor (मॉडल => model.ReturnDate.ToShortDateString) () को हटा देना चाहिए क्योंकि यह काम नहीं करता है।
जेम्स रीतेगईई

129

बस इस परिदृश्य से खुद को निपटना था - ऐसा करने का एक बहुत आसान तरीका मिला, बस अपनी संपत्ति को इस तरह से मॉडल में एनोटेट करें:

[DataType(DataType.Date)]
public DateTime? SomeDateProperty { get; set; }

यह तिथि पिकर से समय बटन भी छिपाएगा।

क्षमा करें यदि यह उत्तर थोड़ी देर का है;)


बहुत बहुत धन्यवाद। यह मेरे लिए बहुत उपयोगी पोस्ट था! +1
Dmytro 16

1
मुझे जिस चीज की जरूरत थी। अति उत्कृष्ट!
रियलिटी डिसफंक्शन

1
मेरे पास हाल ही में एक बैठने का स्थान था, जहां क्रोम में अजीब प्रकार का सामान होता है जब इनपुट प्रकार तिथि होती है, तो html5 का हिस्सा मुझे लगता है, मैं इसके बजाय jquery datepicker का उपयोग करना चाहता था, इसलिए मैं DataType.Text के साथ चला गया - फिर भी मुझे बहुत अच्छे स्वरूपण का उपयोग करने की अनुमति दी
जॉन

2
देर से आने के लिए माफी माँगने की ज़रूरत नहीं है, पुराने सवालों के जवाब पोस्ट करने से उन लोगों को बहुत मदद मिल सकती है जो ओपी नहीं हैं। यह वह उत्तर है जिसकी मैं तलाश कर रहा था क्योंकि मुझे पता था कि यह संभव है लेकिन याद नहीं कर सकते कि कैसे, और आपने इसे 3 साल पहले पोस्ट किया था। अगर कुछ भी आप अविश्वसनीय रूप से जल्दी कर रहे हैं।
रायनफेस्कॉटलैंड

अगर तारीख एक डेटाबेस से आती है, तो मुझे नहीं पता कि यह कैसे मदद कर सकता है ... यह पता नहीं लगा सकता है
एंटोनी पेल्लेटियर

41

यदि आप टेक्स्टबॉक्स में प्रदर्शित करना चाहते हैं तो यह काम करता है:

@Html.TextBoxFor(m => m.Employee.DOB, "{0:dd-MM-yyyy}")

दिनांक गलत तरीके से दिखाया जाएगा यदि ब्राउज़र में "dd-MM-yyyy" की तुलना में अलग-अलग प्रारूप हैं, अर्थात "MM-dd-yyyy"
ओलेग श

16

डेटबेस में दिनांक / समय एक स्वरूपित संस्करण बिल्कुल नहीं होगा । यह केवल तारीख / समय ही होगा। जब आप डेटाबेस से मान निकालते हैं तो आप उस दिनांक / समय को कैसे प्रदर्शित करते हैं यह अलग बात है। मुझे दृढ़ता से संदेह है कि आप वास्तव में चाहते हैं:

model.Returndate = DateTime.Now.Date;

या संभवतः

model.Returndate = DateTime.UtcNow.Date;

हाँ, यदि आप SQL सर्वर स्टूडियो या जो भी हो, डेटाबेस का उपयोग करते हुए देखेंगे, तो अब आप आधी रात को देखेंगे - लेकिन यह अप्रासंगिक है, और जब आप डेटाबेस से तारीख निकालते हैं और इसे किसी उपयोगकर्ता को प्रदर्शित करते हैं, तो आप संबंधित प्रारूप को लागू कर सकते हैं ।

संपादित करें: आपके संपादित प्रश्न के संबंध में, समस्या मॉडल के साथ नहीं है - यह है कि आप दृश्य कैसे निर्दिष्ट करते हैं। आपको कुछ इस तरह का उपयोग करना चाहिए:

@Html.EditorFor(model => model.Returndate.Date.ToString("d"))

जहां dहै मानक दिनांक और समय फॉर्मेट स्पेसिफायर लघु तारीख पैटर्न के लिए (यह ध्यान में वर्तमान सांस्कृतिक सेटिंग्स ले लेंगे जिसका अर्थ है)।

वह बिट मैं बार-बार कह रहा हूं - कि जब आप उपयोगकर्ता को दिनांक / समय प्रदर्शित करते हैं , तो यह समय के बिना दिनांक के रूप में प्रारूपित करने का समय होता है।

संपादित करें: यदि यह काम नहीं करता है, तो मॉडल को सजाने या प्रारूप स्ट्रिंग के साथ देखने का एक तरीका होना चाहिए - या ऐसा कुछ। मैं वास्तव में एक एमवीसी व्यक्ति नहीं हूं, लेकिन ऐसा लगता है कि इसे घोषित रूप से करने का एक अच्छा तरीका होना चाहिए ...


DateTime.Now.Date अभी भी तारीख के साथ समय प्रदर्शित करता है।
ZVenue

1
@ZVenue: यह प्रदर्शित करता है कि कहाँ है? आपको डेटटाइम मान संग्रहीत करना चाहिए , और जहाँ भी आप दिनांक प्रदर्शित कर रहे हैं, केवल दिनांक-स्वरूप प्रारूप का उपयोग करना चाहिए । आपके द्वारा दिया गया कोड (मॉडल में एक संपत्ति सेट करना) संभवतः भंडारण के लिए है, इसलिए यह कोई फर्क नहीं पड़ता कि यह आधी रात का समय है।
जॉन स्कीट

जॉन का सुझाव है कि मैं जिस बारे में बात कर रहा था, वह एसक्यूएल को तारीख बचाता है क्योंकि यह खड़ा है; जब आप इसे प्रिंट करते हैं तो आप अपनी तिथि को उचित रूप से प्रारूपित कर सकते हैं।
रस क्लार्क

2
@Jon: मुझे यह त्रुटि तब हो रही है जब मैंने html.editorfor के लिए आपके एडिट कोड का उपयोग किया था .... "टेम्प्लेट का उपयोग केवल फ़ील्ड एक्सेस, प्रॉपर्टी एक्सेस, सिंगल-डायमेंशन एरे इंडेक्स, या सिंगल-पैरामीटर कस्टम इंडेक्सर एक्सप्रेशंस" के साथ किया जा सकता है। ... रन टाइम में
ZVenue

1
@ZVenue: इस पर भी एक नज़र डालें: stackoverflow.com/questions/5033902/…
जॉन स्कीट

8

आप नीचे के रूप में अपने ViewModel को संशोधित कर सकते हैं:

[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}",ApplyFormatInEditMode = true)]

यह समाधान क्रोम के डेटपिकर संघर्ष की समस्या को भी हल करता है। यदि आप केवल डेटाटाइप निर्दिष्ट करते हैं। Viewmodel में, क्रोम टेक्स्टबॉक्स में डेटापिकर के अपने संस्करण का उपयोग करता है। धन्यवाद!
कैथरीन

7

आप इस ToStringतरह का उपयोग करके कस्टम तिथि समय प्रारूप लागू कर सकते हैं:

DateTime.Now.Date.ToString("MM/dd/yyyy");

DateTime.ToStringप्रारूप पैटर्न पर आगे पढ़ने से यहां और यहां पाया जा सकता है

संपादित करें: अपने प्रश्न को संपादित करने के बाद, जैसे दूसरे ने आपको सुझाव दिया है कि आपको अपने प्रारूप में तारीख का प्रारूप लागू करना चाहिए:

model.Returndate = DateTime.Now.Date;

@Html.EditorFor(model => model.Returndate.Date.ToString("MM/dd/yyyy"))

1
हालांकि इस तारीख को बचाने के मुद्दे पर मदद नहीं करेगा।
रस क्लार्क

क्या वह इसे कॉल करने से नहीं बचा सकता है model.Returndate.ToString("mm/dd/yyyy")?
जलाल ने

यह एक समस्या है .. मैं db में एक datetime क्षेत्र में उस मूल्य डाल रहा हूँ। तो यह काम नहीं करेगा..मेरे मूल पोस्ट को देखें।
ZVenue

क्या यह नहीं होना चाहिए .ToString ("MM / dd / yyyy")? मिमी मिनट है, महीनों नहीं!
बोड्रिक

@Bodrich: धन्यवाद, अपडेट किया गया, मैं अभी उसके पैटर्न को कॉपी करता हूं।
जलाल ने

4

मुझे रेजर में यकीन नहीं है लेकिन ASPX में आप करते हैं:

 <%if (item.Modify_Date != null)
  {%>
     <%=Html.Encode(String.Format("{0:D}", item.Modify_Date))%>     
<%} %>

रेज़र में भी कुछ ऐसा ही होना चाहिए। उम्मीद है कि यह किसी की मदद करेगा।


1
हां उस्तरा वाक्य रचना, जैसे @ Html.Encode में यह भी होगा काम (String.Format ( "0: डी", item.Modify_Date))
सियारन Gallagher

4

यदि आपके पास एक लूप है जैसे कि नीचे वाला।

@ आइटम बदलें। @ आइटम पर जाएँ । आइटम पर जाएँ।

यह उस समय को हटा देगा जब आप मेरे मामले में मॉडल की तरह अपनी संपत्ति का सत्यानाश नहीं कर सकते।

<table>
  <tr>
   <th>Type</th>
   <th>Start Date</th>
  </tr>
    @foreach (var item in Model.TestList) {
      <tr>
        <td>@item.TypeName</td>
        <td>@item.StartDate.Value.ToShortDateString()</td>
      </tr>
      }
</table>

2

वांछित आउटपुट के लिए DisplayFormat और ApplyFormatInEditMode जैसे डेटा एनोटेशन शामिल करें।

[Display(Name = "Bill Date")] [DataType(DataType.Date)] [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)] public DateTime BillDate { get; set; }

अब आपकी बिल की तारीख दिखाई देगी।

यहां छवि विवरण दर्ज करें


कृपया अन्य उत्तरों पर एक नज़र डालें। क्या आपको लगता है कि आपका आवश्यक है और पोस्ट में कुछ नई गुणवत्ता वाली सामग्री जोड़ता है?
एल। गुथरड्ट


1

मुझे इस पृष्ठ पर अन्य समाधानों के साथ कुछ समस्याएं थीं, इसलिए मैंने सोचा कि मैं इसे छोड़ दूंगा।

@Html.TextBoxFor(m => m.EndDate, "{0:d}", new { @class = "form-control datepicker" })

तो आपको केवल दूसरे पैरामीटर में "{0: d}" जोड़ने की आवश्यकता है और आपको जाने के लिए अच्छा होना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.