2010-09-29 30 views
20

से जेसन डेटटाइम को कैसे संभाला जाए, मुझे विश्वास है कि मुझे यहां कुछ स्पष्ट याद आ रही है। जब मैं ओडीटा सेवा से JSON प्रतिक्रिया का अनुरोध करता हूं तो मुझे एक्सएमएल का अनुरोध करते समय डेटटाइम गुणों के लिए एक अलग परिणाम मिलता है। मैं एक उदाहरण के रूप में NerdDinner OData फ़ीड का उपयोग करूंगा।डब्ल्यूसीएफ डाटा सर्विसेज (ओडाटा)

JSON:

http://www.nerddinner.com/Services/OData.svc/Dinners(1)?$format=json 
"EventDate": "\/Date(1235764800000)\/" 

एक्सएमएल: alt text

मैं:

http://www.nerddinner.com/Services/OData.svc/Dinners(1) 
<d:EventDate m:type="Edm.DateTime">2009-02-27T20:00:00</d:EventDate> 

मैं इस परिणाम मिलता है जब मैं एक चेतावनी (नई तारीख (1235764800000)) करना जब मैं LINQPad के साथ एक ही क्वेरी चलाता हूं तो 8 पीएम का नतीजा भी मिलता है। JSON परिणाम में समय क्षेत्र गलत क्यों है? ऐसा लगता है कि प्रतिक्रिया जीएमटी में है। क्या मुझे इसे क्लाइंट (जावास्क्रिप्ट के माध्यम से) पर संभालना चाहिए या यह ऐसा कुछ है जिसे मैं सर्वर पर सेट कर सकता हूं?

मैं सर्वर पर jQuery और डब्ल्यूसीएफ डेटा सर्विसेज (और इकाई फ्रेमवर्क) पर jQuery का उपयोग कर रहा हूं।

अद्यतन:

मैं यूटीसी दिनांक स्वरूपण को संभालने के लिए क्लाइंट की तरफ Datejs उपयोग कर रहा हूँ। मैं सोच रहा हूं कि क्या इस समस्या के बारे में जाने का यह सही तरीका है।

function getDateString(jsonDate) { 
    if (jsonDate == undefined) { 
     return ""; 
    } 
    var utcTime = parseInt(jsonDate.substr(6)); 

    var date = new Date(utcTime); 
    var minutesOffset = date.getTimezoneOffset(); 

    return date.addMinutes(minutesOffset).toString("M/d/yyyy h:mm tt"); 
} 

उत्तर

18
this msdn link के अनुसार

, DateTime वस्तुओं रहे हैं ...

... के रूप में JSON में प्रतिनिधित्व "/ तारीख (टिक की संख्या ) /"। टिकों की संख्या सकारात्मक या नकारात्मक लंबी मान है कि (मिलीसेकंड) की संख्या इंगित करता है जो मध्यरात्रि 01 जनवरी, 1 9 70 यूटीसी के बाद से समाप्त हो गया है।

तो तुम सही जो .NET मान लिया गया है, लेकिन ऐसा जीएमटी के बजाय यूटीसी है (हालांकि they are similar)। somegoodanswers यहां SO पर अधिक जानकारी देते हैं और जेएसओएन को क्लाइंट पर उपयोग करने योग्य तिथि में पार्स करने के तरीकों को भी प्रदान करते हैं।

सर्वर पर यूटीसी से एक विशिष्ट समय क्षेत्र में कनवर्ट करने के लिए, आप TimeZoneInfo कक्षा का उपयोग कर सकते हैं जिसमें ConvertTimeFromUtc विधि है। या आप एक कस्टम कनवर्टर लिख सकते हैं जो JavaScriptConverter कक्षा से विरासत में मिलता है। जावास्क्रिप्ट में, UTC और getTimezoneOffset विधियों का उपयोग किया जा सकता है।

उम्मीद है कि यह मदद करता है और शुभकामनाएं।

6

यदि यह मदद कर सकता है, तो मुझे एक ही समस्या का सामना करना पड़ रहा था और मैं इस तरह कुछ लागू करने के लिए समाप्त हुआ, इतना सुरुचिपूर्ण नहीं बल्कि यह काम करता है।

String.prototype.DateWCF = function(dateformat) { 
    return new Date(parseInt(this.match(/\/Date\(([0-9]+)(?:.*)\)\//)[1])).format(dateformat); 
}; 

तो $.ajax सफलता पर:

 success: function(data) { 
      $.each(data, function() { 
       var hello = this.DateTimeProperty.DateWCF('dd-MM-yyyy')); 
      }); 
     } 

मैं इस सहायक हो सकता है उम्मीद है।

3

date.js script.Try का उपयोग

नीचे
new Date(parseInt(yourDateValue)).toString("ddd, dd-MMM-yyyy, hh:mm:ss") 
0

हम OData सेवाओं के लिए एक जावास्क्रिप्ट ग्राहक के रूप में data.js का उत्पादन। यदि आप किसी वेब क्लाइंट से काम कर रहे हैं, तो इस लाइब्रेरी का उपयोग करके इस सिरदर्द को हटा दिया जाएगा और साथ ही आपको दूसरों में भागने से रोक दिया जाएगा।

OData.read( 
    "http://services.odata.org/Northwind/Northwind.svc/Categories", 
    function (data) { 
    var html = ""; 
    $.each(data.results, function(l) { html += "<div>" + l.CategoryName + "</div>"; }); 
    $(html).appendTo($("#target-element-id")); 
    } 
); 
1

आप जावास्क्रिप्ट में WCF JSON तारीख प्रतिक्रियाएं, पल को पार्स कर रहे हैं:

Data.js JSONP और अपनी ओर से अन्य चिंताओं, यह अनुरोध और JSON डेटा पार्स करने के लिए इस आसान बनाने के सभी संभालती है। जेएस डेट फ्रेमवर्क अधिकांश सिरदर्द को हटा देता है: Moment.js - Parsing ASP.NET JSON Dates। इसमें कुछ अन्य आसान तरीके भी हैं।

0

इस प्रयास करें:

function getDate(datestr) { 
     return new Date(eval('new ' + datestr.replace(/\//g, ''))); 
    } 
4

यह ठीक काम करना चाहिए:

var date = new Date(parseInt(jsonDate.substr(6))); 

substr समारोह "/ तिथि (" भाग बाहर ले जाता है, और parseInt समारोह पूर्णांक हो जाता है और पर ध्यान नहीं देता ")/" अतं मै।

var date = new Date(jsonDate); //no ugly parsing needed; full timezone support 

यह पहले से ही तय किया गया था और उन पर चर्चा है कि इस previous post

0

इस उत्तर पर एक नज़र के ख़िलाफ़ मतदान हो सकता है:

आईएसओ 8601 स्वरूपित JSON तिथियों के लिए, बस दिनांक निर्माता में स्ट्रिंग पारित (!!) लेकिन एक वैकल्पिक समाधान है कि आप अपनी डब्ल्यूसीएफ सेवा को और अधिक दोस्ताना तरीके से तिथियों को वापस करने के लिए बदल दें।

यहाँ मेरी WCF सेवा, एक UpdateDateOriginal मूल्य (कष्टप्रद डिफ़ॉल्ट स्वरूपण कि WCF मेरी दिनांक समय मूल्य के लिए इस्तेमाल किया गया है का उपयोग करते हुए) प्रदर्शित होने से कुछ नमूना JSON, और एक ही दिनांक समय मूल्य का एक दोस्ताना UpdateDate संस्करण है।

Change default date serialization in WCF

:

enter image description here

मैं निम्न आलेख में यह करने के लिए कोड पोस्ट किया है

संबंधित मुद्दे

 संबंधित मुद्दे