सवाल मैं एक Microsoft JSON दिनांक कैसे प्रारूपित करूं?


मैं अपनी पहली दरार ले रहा हूँ अजाक्स jQuery के साथ। मुझे अपना डेटा मेरे पृष्ठ पर मिल रहा है, लेकिन मुझे JSON डेटा के साथ कुछ परेशानी हो रही है जो दिनांक डेटा प्रकारों के लिए वापस आती है। असल में, मुझे एक स्ट्रिंग बैक मिल रहा है जो इस तरह दिखता है:

/Date(1224043200000)/

किसी से पूरी तरह से नया JSON तक - मैं इसे एक लघु तिथि प्रारूप में कैसे प्रारूपित करूं? क्या इसे jQuery कोड में कहीं भी संभाला जाना चाहिए? मैंने कोशिश की है jQuery.UI.datepicker प्लगइन का उपयोग कर $.datepicker.formatDate() बिना किसी सफलता के।

एफवाईआई: यहां दिए गए समाधान का जवाब यहां दिए गए उत्तरों के संयोजन के साथ आया है:

function getMismatch(id) {
  $.getJSON("Main.aspx?Callback=GetMismatch",
    { MismatchId: id },

    function (result) {
      $("#AuthMerchId").text(result.AuthorizationMerchantId);
      $("#SttlMerchId").text(result.SettlementMerchantId);
      $("#CreateDate").text(formatJSONDate(Date(result.AppendDts)));
      $("#ExpireDate").text(formatJSONDate(Date(result.ExpiresDts)));
      $("#LastUpdate").text(formatJSONDate(Date(result.LastUpdateDts)));
      $("#LastUpdatedBy").text(result.LastUpdateNt);
      $("#ProcessIn").text(result.ProcessIn);
    }
  );

  return false;
}

function formatJSONDate(jsonDate) {
  var newDate = dateFormat(jsonDate, "mm/dd/yyyy");
  return newDate;
}

इस समाधान ने मेरी ऑब्जेक्ट को कॉलबैक विधि से प्राप्त किया और दिनांक प्रारूप लाइब्रेरी का उपयोग करके पेज पर तारीखों को सही तरीके से प्रदर्शित किया।


1793


मूल


यह दिलचस्प हो सकता है: hanselman.com/blog/... - citronas
/Date(...)/ प्रारूप माइक्रोसॉफ्ट के अंतर्निहित जेएसओएन तिथि प्रारूप के लिए विशिष्ट है - यह किसी भी मानक का हिस्सा नहीं है, और जेएसओएन, जावास्क्रिप्ट से आ रहा है, एक मानक है: आईएसओ प्रारूप जावास्क्रिप्ट निर्दिष्ट करता है: stackoverflow.com/a/15952652/176877  इसलिए, यह प्रश्न माइक्रोसॉफ्ट के जेएसओएन तिथि प्रारूप के लिए विशिष्ट है। मैंने इसे स्पष्ट करने के लिए शीर्षक को संशोधित किया। - Chris Moschini
आप मजाक कर रहे हो! माइक्रोसॉफ्ट ने JSON पर अपना खुद का स्पिन मुद्रित किया है! और तारीखों पर !! वे कब सीखेंगे! - Nick.McDermaid
.NET पक्ष पर न्यूटॉन्सॉफ्ट JSON का उपयोग करें और जेएस पक्ष पर अच्छे टाइप किए गए मान रखने के लिए, बस उपयोग करें: github.com/RickStrahl/json.date-extensions - baHI


जवाब:


Eval आवश्यक नहीं है। यह ठीक काम करेगा:

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

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

संपादित करें: मैंने जानबूझकर रेडिक्स छोड़ दिया है (parseInt के लिए दूसरा तर्क); देख नीचे मेरी टिप्पणी। इसके अलावा, मैं पूरी तरह से सहमत हूं रोरी की टिप्पणी: इस पुराने प्रारूप पर आईएसओ -8601 तिथियों को प्राथमिकता दी जाती है - इसलिए इस प्रारूप को आम तौर पर नए विकास के लिए उपयोग नहीं किया जाना चाहिए। उत्कृष्ट देखें Json.NET एक महान विकल्प के लिए पुस्तकालय जो आईएसओ -8601 प्रारूप का उपयोग कर तिथियों को क्रमबद्ध करता है।

आईएसओ -8601 स्वरूपित JSON तिथियों के लिए, बस स्ट्रिंग को दिनांक निर्माता में पास करें:

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

1566



@ ब्रूम: एमएस प्रारूप को बदलता है तो दोनों विधियों (प्रतिस्थापन समारोह और यह जवाब) बदलना होगा। - Roy Tinker
@LeeWitney: हाँ, लेकिन यह प्रत्यय को अनदेखा कर देगा (जो एक टाइमज़ोन ऑफसेट है)। ParseInt फ़ंक्शन स्ट्रिंग के सामने से अंकों को पकड़ता है जब तक कि यह एक गैर-संख्यात्मक चरित्र या स्ट्रिंग के अंत से मुकाबला न हो, जिस बिंदु पर यह बंद हो जाता है और संख्यात्मक परिणाम देता है। - Roy Tinker
क्या आप इसे radix var date = new date (parseInt (jsonDate.substr (6), 10) के साथ अद्यतन कर सकते हैं); - James Kyburz
@ जेम्ससबर्ज़: प्रत्येक नियम में अपवाद हैं, और मुझे लगता है कि यह तब होता है जब एक अपवाद लागू होता है। .NET से JSON दिनांक संख्या कभी नहीँ एक अग्रणी "0" है, इसलिए हम सुरक्षित रूप से रेडिक्स छोड़ सकते हैं। - Roy Tinker
यह ध्यान देने योग्य है कि यह दिनांक प्रारूप बहुत खराब है और सामान्य कदम JSON में ISO-8601 स्वरूपित तिथियों के लिए है। देख hanselman.com/blog/... - Rory


आप JSON से दिनांक प्राप्त करने के लिए इसका उपयोग कर सकते हैं:

var date = eval(jsonDate.replace(/\/Date\((\d+)\)\//gi, "new Date($1)"));

और फिर आप इसका उपयोग कर सकते हैं एक जावास्क्रिप्ट दिनांक प्रारूप स्क्रिप्ट (1.2 KB जब minified और gzipped) इसे प्रदर्शित करने के लिए इसे प्रदर्शित करने के लिए।


115



रेखा के साथ कुछ भी गलत नहीं है, अनुक्रम \ // है। पहला स्लैश बच निकला है इसलिए यह एक टिप्पणी की तरह गिनती नहीं है। यह आपका संपादक आपको धोखा दे रहा है, लाइन ठीक काम करेगी। - andreialecu
@ आरबॉल, बकवास: jsonDate = new Date(+jsonDate.replace(/\/Date\((\d+)\)\//, '$1')); - eyelidlessness
पीएसटी सही था, बिना 'eval' के विभिन्न तरीकों से ऐसा करना संभव है। क्रॉकफ़ोर्ड का कहना है कि 'eval Is Evil' है क्योंकि यह कम पठनीय है और कम सुरक्षित है, इसके अलावा वह आगे यह भी कह सकता है कि यह कम कुशल और अधिक खतरनाक है क्योंकि यह जावास्क्रिप्ट कंपाइलर को हिट करता है। - Mark Rogers
@Edy: new Function लगभग उतना ही बुरा है eval: dev.opera.com/articles/view/efficient-javascript/... - Marcel Korpel
@Edy: यह eval का एक और रूप है, और बस 'बुराई' के रूप में है। इसके बजाय स्ट्रिंग को पार्स करें (नीचे मेरा उत्तर देखें) - Roy Tinker


न्यूटॉन्सॉफ्ट का उपयोग करने वालों के लिए Json.NET, इसे पढ़ने के तरीके पर पढ़ें IE8 में मूल JSON, फ़ायरफ़ॉक्स 3.5 प्लस Json.NET

Json.NET द्वारा लिखित तिथियों के प्रारूप को बदलने पर भी दस्तावेज़ उपयोगी है: जेसन.नेट के साथ सीरियलाइजिंग तिथियां

उन लोगों के लिए जो बहुत आलसी हैं, यहां त्वरित कदम हैं। चूंकि जेएसओएन के पास डेटटाइम कार्यान्वयन ढीला है, तो आपको इसका उपयोग करने की आवश्यकता है IsoDateTimeConverter()। ध्यान दें कि Json.NET 4.5 के बाद डिफ़ॉल्ट दिनांक प्रारूप आईएसओ है इसलिए नीचे दिया गया कोड आवश्यक नहीं है।

string jsonText = JsonConvert.SerializeObject(p, new IsoDateTimeConverter());

जेएसओएन के माध्यम से आ जाएगा

"fieldName": "2009-04-12T20:44:55"

अंत में, आईएसओ दिनांक को जावास्क्रिप्ट दिनांक में बदलने के लिए कुछ जावास्क्रिप्ट:

function isoDateReviver(value) {
  if (typeof value === 'string') {
    var a = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)(?:([\+-])(\d{2})\:(\d{2}))?Z?$/.exec(value);
      if (a) {
        var utcMilliseconds = Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], +a[5], +a[6]);
        return new Date(utcMilliseconds);
      }
  }
  return value;
}

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

$("<span />").text(isoDateReviver(item.fieldName).toLocaleString()).appendTo("#" + divName);

84



जावास्क्रिप्ट दिनांक कन्स्ट्रक्टर आपके लिए स्ट्रिंग को पार्स कर सकता है: new Date("2009-04-12T20:44:55") - David Hogue
चेतावनी - तिथि () कन्स्ट्रक्टर प्रारूप और पार्सिंग ईसीएमएस्क्रिप्ट 6 से पहले गैर-मानक हैं। उदाहरण के लिए, आईई 9 उस तारीख का इलाज करता है जिसे आप स्थानीय समय के रूप में कन्स्ट्रक्टर देते हैं, भले ही यह IS0-8601 में है, जिसे हर जगह यूसीटी के रूप में निहित किया गया है। यदि आप पुराने ब्राउज़र का समर्थन करते हैं तो डेट कन्स्ट्रक्टर पर भरोसा न करें। codeofmatt.com/2013/06/07/... - DanO
गैर-यूटीसी तिथि भेजना जल्द ही या बाद में आपको परेशानी में डाल देगा। - tymtam


मूल उदाहरण:

/Date(1224043200000)/  

अंतर्निहित जेएसओएन क्रमबद्धता का उपयोग करते हुए डब्ल्यूसीएफ आरईएसटी के माध्यम से तिथियां भेजते समय डब्ल्यूसीएफ द्वारा प्रयुक्त स्वरूपण को प्रतिबिंबित नहीं करता है। (कम से कम .NET 3.5, एसपी 1 पर)

मुझे यहां जवाब उपयोगी पाया गया है, लेकिन रेगेक्स को थोड़ा सा संपादन आवश्यक है, क्योंकि ऐसा लगता है कि टाइमज़ोन जीएमटी ऑफ़सेट डब्लूसीएफ जेएसओएन में लौटाई गई संख्या (1 9 70 से) में जोड़ा जा रहा है।

एक डब्ल्यूसीएफ सेवा में मेरे पास है:

[OperationContract]
[WebInvoke(
    RequestFormat = WebMessageFormat.Json,
    ResponseFormat = WebMessageFormat.Json,
    BodyStyle = WebMessageBodyStyle.WrappedRequest
    )]
ApptVisitLinkInfo GetCurrentLinkInfo( int appointmentsId );

ApptVisitLinkInfo को परिभाषित किया गया है:

public class ApptVisitLinkInfo {
    string Field1 { get; set; }
    DateTime Field2 { get; set; }
    ...
}

जब सेवा से जेसन के रूप में "फ़ील्ड 2" वापस किया जाता है तो मान है:

/Date(1224043200000-0600)/

मूल्य के हिस्से के रूप में शामिल टाइमज़ोन ऑफसेट पर ध्यान दें।

संशोधित रेगेक्स:

/\/Date\((.*?)\)\//gi

यह थोड़ा और उत्सुक है और माता-पिता के बीच सबकुछ पकड़ता है, केवल पहले नंबर पर नहीं। परिणामी समय 1 9 70 में sinze, प्लस टाइमज़ोन ऑफसेट सभी को तारीख वस्तु प्राप्त करने के लिए eval में खिलाया जा सकता है।

प्रतिस्थापन के लिए जावास्क्रिप्ट की परिणामी रेखा है:

replace(/\/Date\((.*?)\)\//gi, "new Date($1)");

57



यह गलत है, नई तिथि (1224043200000-0600) इस तारीख में 600 मिलीसेकंड, केवल 6 घंटे नहीं होने पर, तारीख से 600 घटाएगी। - ariel
@ariel: एक नज़र डालें मिलीसेकंड से जावास्क्रिप्ट दिनांक और टाइमज़ोन - Bergi
मुझे लगता है कि टाइमज़ोन ऑफ़सेट केवल तभी शामिल किया गया है यदि आपके पास .NET में डेटटाइम ऑब्जेक्ट पर टाइमज़ोन है (जो डिफ़ॉल्ट व्यवहार है)। यदि आपकी तिथि यूटीसी में है, तो डेटटाइम का उपयोग करें। स्पेसिस्कीकिंड (दिनांक, डेटटाइमकिंड.यूटीसी) और जब आप ऑफसेट नहीं करते हैं तो आपको उचित यूटीसी वैल्यू मिल जाएगी, बिना ऑफसेट के, जिसे आप फिर से उपयोगकर्ता के टाइमज़ोन में बदल सकते हैं। यदि यह स्थानीय समय में है, तो .ToUniversalTime () का उपयोग करें और यह यूटीसी में परिवर्तित हो जाएगा, और आपके लिए पहले से निर्दिष्ट "दयालु" है। - jvenema
जावास्क्रिप्ट -0100 में एक द्विआधारी स्ट्रिंग होगी इसलिए सावधान रहें! - verbedr
एक बार जब आपको डब्ल्यूसीएफ से जेएस में परिवर्तित तिथि मिल गई है, तो रिवर्स के बारे में कैसे। आपको पूर्णांक के रूप में तारीख (date.getTime () का उपयोग करना होगा) जिसे आप उसी डब्ल्यूसीएफ में पास करना चाहते हैं? - NitinSingh


अपने आप को दोहराना न करें - स्वचालित तिथि रूपांतरण का उपयोग कर $.parseJSON()

आपकी पोस्ट के उत्तर जावास्क्रिप्ट तिथियों में मैन्युअल दिनांक रूपांतरण प्रदान करते हैं। मैंने jQuery का विस्तार किया है $.parseJSON() बस थोड़ा सा, इसलिए जब आप इसे निर्देश देते हैं तो यह स्वचालित रूप से तिथियों को पार्स करने में सक्षम होता है। यह एएसपी.नेट स्वरूपित तिथियों को संसाधित करता है (/Date(12348721342)/) साथ ही साथ आईएसओ स्वरूपित तिथियां (2010-01-01T12.34.56.789Z) जो ब्राउज़र में मूल JSON फ़ंक्शंस द्वारा समर्थित हैं (और json2.js जैसे पुस्तकालय)।

वैसे भी। यदि आप बार-बार अपना दिनांक रूपांतरण कोड दोहराना नहीं चाहते हैं तो मैं आपको पढ़ने का सुझाव देता हूं यह ब्लॉग पोस्ट और वह कोड प्राप्त करें जो आपके जीवन को थोड़ा आसान बना देगा।


53





यदि आप जावास्क्रिप्ट में कहते हैं,

var thedate = new Date(1224043200000);
alert(thedate);

आप देखेंगे कि यह सही तिथि है, और आप किसी भी ढांचे के साथ जावास्क्रिप्ट कोड में कहीं भी इसका उपयोग कर सकते हैं।


50



यही वह है जो मैंने सोचा होगा सिवाय इसके कि यह समाप्त होता है: var thedate = / date (1224043200000) /; कम से कम मेरे लिए... - rball
दिनांक () और तिथि (1224043200000) दोनों क्रोम और फ़ायरफ़ॉक्स दोनों में एक ही परिणाम देते हैं। सुनिश्चित नहीं है कि यह पुराने ब्राउज़र में काम करता है, लेकिन यह उत्तर अब ब्राउज़र में काम नहीं करता है। - James
@ जेम्स, हां यह ब्राउज़र की वर्तमान तारीख दे रहा है। :( - vissu
आपको इसे "नई तिथि (1224043200000)" लिखना होगा। - BrainSlugs83


डेमो जांचने के लिए यहां क्लिक करें

जावास्क्रिप्ट / jQuery

var = MyDate_String_Value = "/Date(1224043200000)/"
var value = new Date
            (
                 parseInt(MyDate_String_Value.replace(/(^.*\()|([+-].*$)/g, ''))
            );
var dat = value.getMonth() +
                         1 +
                       "/" +
           value.getDate() +
                       "/" +
       value.getFullYear();

परिणाम - "10/15/2008"


47



ऊपर विधि के लिए बस एक सुधार। फ़ंक्शन फॉर्मेटरफेचा (एफईसी) {var value = new date (parseInt (fec.replace (/ (^। * () | ([+ -]। * $) / g, ''))); var mes = value.getMonth (); var dia = value.getDate (); var date = dia + "/" + mes + "/" + value.getFullYear (); अगर (dia <10) date = date.substr (0, 0) + '0' + dia + date.substr (1); अगर (mes <10) दिनांक = date.substr (0, 3) + '0' + mes + date.substr (4); वापसी दिनांक;} दिनांक स्वरूपित डीडीएमएमवाई। चीयर्स! - Matias
ओह !!! बहुत बहुत धन्यवाद!!! यह वास्तव में मेरा महीना बना दिया। - Raihan Ridoy


अपडेट किया गया

हमारे पास एक आंतरिक यूआई लाइब्रेरी है जिसे माइक्रोसॉफ्ट के एएसपी.नेट दोनों में अंतर्निहित जेएसओएन प्रारूप का सामना करना पड़ता है /Date(msecs)/, यहां मूल रूप से पूछा गया है, और जेएसओएन.नेट सहित अधिकांश जेएसओएन का डेट प्रारूप, जैसे 2014-06-22T00:00:00.0। इसके अलावा हमें सामना करने की जरूरत है oldIE कुछ भी सामना करने में असमर्थता लेकिन 3 दशमलव स्थानों पर

हम पहले पता लगाते हैं कि हम किस तरह की तारीख का उपभोग कर रहे हैं, इसे सामान्य जावास्क्रिप्ट में पार्स करें Date ऑब्जेक्ट, फिर इसे प्रारूपित करें।

1) माइक्रोसॉफ्ट दिनांक प्रारूप का पता लगाएं

// Handling of Microsoft AJAX Dates, formatted like '/Date(01238329348239)/'
function looksLikeMSDate(s) {
    return /^\/Date\(/.test(s);
}

2) आईएसओ दिनांक प्रारूप का पता लगाएं

var isoDateRegex = /^(\d\d\d\d)-(\d\d)-(\d\d)T(\d\d):(\d\d):(\d\d)(\.\d\d?\d?)?([\+-]\d\d:\d\d|Z)?$/;

function looksLikeIsoDate(s) {
    return isoDateRegex.test(s);
}

3) पार्स एमएस तिथि प्रारूप:

function parseMSDate(s) {
    // Jump forward past the /Date(, parseInt handles the rest
    return new Date(parseInt(s.substr(6)));
}

4) पार्स आईएसओ दिनांक प्रारूप।

हमारे पास कम से कम यह सुनिश्चित करने का एक तरीका है कि हम मानक आईएसओ तिथियों या आईएसओ तिथियों के साथ काम कर रहे हैं जो हमेशा तीन मिलीसेकंद स्थानों के लिए संशोधित होते हैं (ऊपर देखो), इसलिए पर्यावरण के आधार पर कोड अलग है।

4 ए) पार्स मानक आईएसओ तिथि प्रारूप, पुरानी आईई के मुद्दों से निपटने:

function parseIsoDate(s) {
    var m = isoDateRegex.exec(s);

    // Is this UTC, offset, or undefined? Treat undefined as UTC.
    if (m.length == 7 ||                // Just the y-m-dTh:m:s, no ms, no tz offset - assume UTC
        (m.length > 7 && (
            !m[7] ||                    // Array came back length 9 with undefined for 7 and 8
            m[7].charAt(0) != '.' ||    // ms portion, no tz offset, or no ms portion, Z
            !m[8] ||                    // ms portion, no tz offset
            m[8] == 'Z'))) {            // ms portion and Z
        // JavaScript's weirdo date handling expects just the months to be 0-based, as in 0-11, not 1-12 - the rest are as you expect in dates.
        var d = new Date(Date.UTC(m[1], m[2]-1, m[3], m[4], m[5], m[6]));
    } else {
        // local
        var d = new Date(m[1], m[2]-1, m[3], m[4], m[5], m[6]);
    }

    return d;
}

4 बी) एक निश्चित तीन मिलीसेकंड दशमलव स्थानों के साथ पार्स आईएसओ प्रारूप - बहुत आसान:

function parseIsoDate(s) {
    return new Date(s);
}

5) इसे प्रारूपित करें:

function hasTime(d) {
    return !!(d.getUTCHours() || d.getUTCMinutes() || d.getUTCSeconds());
}

function zeroFill(n) {
    if ((n + '').length == 1)
        return '0' + n;

    return n;
}

function formatDate(d) {
    if (hasTime(d)) {
        var s = (d.getMonth() + 1) + '/' + d.getDate() + '/' + d.getFullYear();
        s += ' ' + d.getHours() + ':' + zeroFill(d.getMinutes()) + ':' + zeroFill(d.getSeconds());
    } else {
        var s = (d.getMonth() + 1) + '/' + d.getDate() + '/' + d.getFullYear();
    }

    return s;
}

6) इसे सब एक साथ बांधें:

function parseDate(s) {
    var d;
    if (looksLikeMSDate(s))
        d = parseMSDate(s);
    else if (looksLikeIsoDate(s))
        d = parseIsoDate(s);
    else
        return null;

    return formatDate(d);
}

नीचे दिया गया पुराना उत्तर jQuery के अपने JSON पार्सिंग में इस दिनांक स्वरूपण को टाइप करने के लिए उपयोगी है, इसलिए आपको तारों की बजाय दिनांक वस्तुएं मिलती हैं, या यदि आप अभी भी jQuery <1.5 में फंस गए हैं।

पुराना उत्तर

यदि आप एएसपी.नेट एमवीसी के साथ jQuery 1.4 के अजाक्स फ़ंक्शन का उपयोग कर रहे हैं, तो आप सभी डेटटाइम गुणों को डेट ऑब्जेक्ट्स में बदल सकते हैं:

// Once
jQuery.parseJSON = function(d) {return eval('(' + d + ')');};

$.ajax({
    ...
    dataFilter: function(d) {
        return d.replace(/"\\\/(Date\(-?\d+\))\\\/"/g, 'new $1');
    },
    ...
});

JQuery 1.5 में आप ओवरराइडिंग से बच सकते हैं parseJSON अजाक्स कॉल में कन्वर्टर्स विकल्प का उपयोग कर वैश्विक स्तर पर विधि।

http://api.jquery.com/jQuery.ajax/

दुर्भाग्यवश आपको वैश्विक स्तर पर पार्स को पार्स करने के लिए पुराने eval मार्ग पर जाना होगा - अन्यथा आपको उन्हें अधिक केस-दर-मामले आधार पोस्ट-पार्स पर रूपांतरित करने की आवश्यकता है।


31





मुझे भी इस समस्या का समाधान खोजना पड़ा और आखिरकार मैं पल में आया। जेएस जो एक अच्छी लाइब्रेरी है जो इस तिथि प्रारूप को और कई अन्य लोगों को पार्स कर सकती है।

var d = moment(yourdatestring)

इसने मेरे लिए कुछ सिरदर्द बचाया, इसलिए मैंने सोचा कि मैं इसे आपके साथ साझा करूंगा। :)
आप यहां इसके बारे में कुछ और जानकारी पा सकते हैं: http://momentjs.com/


21





मैंने "इनलाइन स्क्रिप्ट में ऑब्जेक्ट्स लिखते समय Microsoft serializer द्वारा जेनरेट किए गए लोगों से छुटकारा पाने के लिए" पैनोस की नियमित अभिव्यक्ति में वर्ण जोड़ना समाप्त कर दिया:

तो अगर आपके पास सी # में एक संपत्ति है कोड के पीछे यह कुछ ऐसा है

protected string JsonObject { get { return jsSerialiser.Serialize(_myObject); }}

और आपके एएसपीएक्स में आपके पास है

<script type="text/javascript">
    var myObject = '<%= JsonObject %>';
</script>

आपको कुछ मिल जाएगा

var myObject = '{"StartDate":"\/Date(1255131630400)\/"}';

डबल कोट्स पर ध्यान दें।

इसे एक ऐसे रूप में प्राप्त करने के लिए जो eval सही ढंग से deserialize होगा, मैंने उपयोग किया:

myObject = myObject.replace(/"\/Date\((\d+)\)\/"/g, 'new Date($1)');

मैं उपयोग करता हूं प्रोटोटाइप और इसका इस्तेमाल करने के लिए मैंने जोड़ा

String.prototype.evalJSONWithDates = function() {
    var jsonWithDates = this.replace(/"\/Date\((\d+)\)\/"/g, 'new Date($1)');
    return jsonWithDates.evalJSON(true);
}

21





दिनांक में कोई निर्मित प्रकार नहीं है JSON। यह कुछ युग से सेकंड / मिलीसेकंड की संख्या की तरह दिखता है। यदि आप युग को जानते हैं तो आप सही समय पर जोड़कर तिथि बना सकते हैं।


20



यह गलत है, JSON जावास्क्रिप्ट तिथियों का उपयोग करता है, अतिरिक्त टाइमज़ोन जानकारी के साथ - युग जावास्क्रिप्ट दिनांक वर्ग के युग (स्पष्ट कारणों से) के समान है। - BrainSlugs83
@ BrainSlug83 - यह उत्तर इस धारणा के लिए एक संदर्भ प्रदान करता है कि JSON में अंतर्निहित दिनांक प्रकार नहीं है। यदि आप असहमत हैं, तो कृपया एक वैकल्पिक संदर्भ प्रदान करें। (आप एक विशिष्ट ढांचे के बारे में सोच नहीं रहे हैं जिसने तारीखों का प्रतिनिधित्व करने के लिए एक स्ट्रिंग प्रारूप पर निर्णय लिया है? यह JSON मानक का हिस्सा नहीं है, वास्तव में ऐसा नहीं हो सकता क्योंकि यह ऐसी स्ट्रिंग को शामिल करना असंभव कर देगा जो नहीं है एक तारीख के रूप में लिया जाना चाहिए, लेकिन ऐसा होता है कि तारीख पैटर्न से मेल खाने वाले पात्रों का एक सेट होता है।) - nnnnnn