2013-06-17 9 views
31

मेरे विचार में मैं knockout.js बाइंडेड फ़ील्ड प्रदर्शित करना चाहता हूं जिसमें एक तिथि है। यह सिर्फ एक प्रदर्शन क्षेत्र है, न कि इनपुट फ़ील्ड। नीचे जब basemodel.actionDate = ko.observable()Knockout.js प्रारूप दिनांक आइटम

<p class="display-field" data-bind="text: baseModel.actionDate"/> 

हालांकि इस इस प्रकार प्रदर्शित किया जाता है की तरह कुछ:

2013-06-17T11:56:18.4537687Z 

क्या इस dd mm yyyy फ़ॉर्मेट करने के लिए सबसे आसान तरीका है। उदाहरण: 17 June 2013?

+0

आप अपने नमूदार या स्ट्रिंग "में' date' वस्तु भंडारण कर रहे हैं 2013- 06-17T11: 56: 18.4537687Z "? – nemesv

उत्तर

64

मैं moment.js दिनांक स्वरूपण लाइब्रेरी की अनुशंसा करता हूं।

यह उपयोग करके आप अपने ध्यान में रखते हुए कुछ इस तरह कर सकते हैं:

<p class="display-field" data-bind="text: moment(baseModel.actionDate()).format('LL')"/> 
+1

धन्यवाद। अछा लगता है। लेकिन मुझे एक "अपरिभाषित NaN 0NaN" त्रुटि दिखाई देती है। कोई विचार? – Martin

+8

आह यदि आपका 'actionDate' एक ko.observable है, तो आपको इसे पल में पास करने से पहले मूल्य प्राप्त करने के लिए वहां'() 'रखना होगा। मैंने पोस्ट को संशोधित किया। – Brandon

+0

बिल्कुल सही। धन्यवाद। – Martin

12

या तो यह सुनिश्चित कर लें सेवा उत्पादन यह एक सही स्वरूप, या ग्राहक के पक्ष

में प्रारूप में आप इसे ग्राहक के पक्ष कार्यसूची तो आप एक दिनांक वस्तु में आईएसओ दिनांक स्ट्रिंग पार्स कर सकते हैं और उसके बाद का उपयोग jQuery के वैश्वीकृत चाहते हैं इसे वांछित प्रारूप में प्रारूपित करें।

मैं इस

http://jsfiddle.net/vRf5B/42/

ko.extenders.date = function(target, format) { 
    return ko.computed({ 
     read: function() { 
      var value = target(); 
      if(typeof value === "string") { 
       value = new Date(value);     
      } 

      format = typeof format === "string" ? format: undefined; 
      value = Globalize.format(value, format); 

      return value;   
     }, 
     write: target 
    }); 
} 

अद्यतन के लिए KO extenders का उपयोग

मैं अपने ब्लॉग कैसे कच्चे दिनांक मान यह मेरी उजागर किया जा सकता है पुनः प्राप्त करने पर एक प्रश्न मिला गणना की गई कच्ची मान

http://jsfiddle.net/vRf5B/91/

+0

अच्छा अनुस्मारक पुन: सेवा आउटपुट बदल रहा है!मैं इस पर घुसपैठ कर रहा था .. फिर, याद किया कि मैं serialization सर्वर पक्ष को नियंत्रित कर सकते हैं। यह पंक्ति वैश्विक रूप से प्रभावित करती है कि कैसे एक एएसपी.नेट एमवीसी ऐप सभी जेएसओएन क्रमबद्धता (WebApiConfig.Register विधि में रखा गया है) को नियंत्रित करता है: GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.DateFormatString = "dd/MM/yyyy" – bkwdesign

+3

केओ का उपयोग कर आधुनिक एमवीवीएम साइट्स के लिए या कोणीय, आप वास्तविक तिथि ऑब्जेक्ट चाहते हैं ताकि आप उनके लिए तर्क लागू कर सकें – Anders

+0

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

1

मैं मानचित्रण प्लगइन एक्सटेंडर उपयोग करने की कोशिश के साथ कुछ मुद्दों (मुझे लगता है कि) था। जब से मैं केवल दिनांक प्रदर्शित कर रहा हूँ और उन्हें अनुमति नहीं दे संपादित करने के लिए मैं सिर्फ इस तरह एक बाध्यकारी हैंडलर का उपयोग करना पसंद:

ko.bindingHandlers.date = 
    { 
     update: function (element, valueAccessor:() => any, allBindingsAccessor: any) 
     { 
      return ko.bindingHandlers.text.update(element, function() 
      { 
       var value: any = ko.utils.unwrapObservable(valueAccessor()); 

       if (value == null) 
       { 
        return null; 
       } 

       if (typeof value === "string") 
       { 
        value = new Date(value); 
       } 

       return value.toShortDateString(); 

      }, allBindingsAccessor, null, null); 
     } 
    }; 

मैं करने के लिए एक प्रोटोटाइप जोड़ने के लिए चुना है:

Shipped on <span data-bind="date: shipDt"></span> 

यहाँ हैंडलर है इस तरह की तिथि वस्तु (और हैंडलर में बनाई गई दिनांक वस्तु पर toShortDateString पर कॉल करें) - लेकिन आप ऊपर दिए गए तर्क को Globalize या जो कुछ भी पसंद करते हैं उसे प्रतिस्थापित कर सकते हैं।

Date.prototype.toShortDateString = function() 
{ 
    return (this.getMonth() + 1) + "/" + this.getDate() + "/" + this.getFullYear(); 
}; 
0

यदि आप moment.js का संदर्भ दे रहे हैं तो मैं वास्तव में नॉकआउट मॉडल में प्रारूपित होगा।

var BiographicViewModel = function (person) { 
    this.FirstName = ko.observable(person.first_name); 
    this.LastName = ko.observable(person.last_name); 
    this.DOB = ko.observable(moment(person.birth_date).format("MM/DD/YYYY")); 
    this.Gender = ko.observable(person.gender); 
    this.Country = ko.observable(person.country); 
    this.City = ko.observable(person.city);   
}; 
0

प्रचार प्रारूप समारोह:

Date.prototype.toFormattedDate = function() { 
    var dd = this.getDate(); 
    if (dd < 10) dd = '0' + dd; 
    var mm = this.getMonth() + 1; 
    if (mm < 10) mm = '0' + mm; 
    var yyyy = this.getFullYear(); 
    /* change format here */ 
    return String(mm + "/" + dd + "/" + yyyy); 
}; 

और के रूप में की तारीख तार के साथ उपयोग करें:

<span data-bind="text: new Date(TaxAuthority.RegDate).toFormattedDate()"></span> 
संबंधित मुद्दे