अपडेट किया गया
हमारे पास एक आंतरिक यूआई लाइब्रेरी है जिसे माइक्रोसॉफ्ट के एएसपी.नेट बिल्ट-इन /Date(msecs)/
जेएसएन प्रारूप के साथ सामना करना पड़ता है, जैसे , मूल रूप से यहां के बारे में पूछा गया है, और जेएसईएन के जेएसएन सहित अधिकांश जेएनएस की तारीख प्रारूप 2014-06-22T00:00:00.0
। इसके अलावा, हमें Oldie की अक्षमता के साथ कुछ भी लेकिन 3 दशमलव स्थानों के साथ सामना करने की आवश्यकता है ।
हम पहले पता लगाते हैं कि हम किस तरह की तारीख का उपभोग कर रहे हैं, इसे सामान्य जावास्क्रिप्ट Date
ऑब्जेक्ट में पार्स करें , फिर इसे प्रारूपित करें।
1) Microsoft तिथि प्रारूप का पता लगाएं
// 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 में अटके हुए हैं।
पुराना उत्तर
यदि आप ASP.NET MVC के साथ jQuery 1.4 के अजाक्स फ़ंक्शन का उपयोग कर रहे हैं, तो आप सभी DateTime गुणों को दिनांक ऑब्जेक्ट्स में बदल सकते हैं:
// Once
jQuery.parseJSON = function(d) {return eval('(' + d + ')');};
$.ajax({
...
dataFilter: function(d) {
return d.replace(/"\\\/(Date\(-?\d+\))\\\/"/g, 'new $1');
},
...
});
JQuery 1.5 में आप parseJSON
Ajax कॉल में कन्वर्टर्स विकल्प का उपयोग करके विश्व स्तर पर विधि को ओवरराइड करने से बचा सकते हैं ।
http://api.jquery.com/jQuery.ajax/
दुर्भाग्यवश आपको विश्व स्तर पर जगह-जगह पार्स करने के लिए पुराने eval रूट पर स्विच करना होगा - अन्यथा आपको उन्हें अधिक केस-बाय-केस आधार पोस्ट-पार्स पर बदलने की आवश्यकता है।