යාවත්කාලීන කරන ලදි
අපි දෙන්නම මයික්රොසොෆ්ට් සමාගමේ ASP.NET බිල්ට් JSON ආකෘතිය, වැනි සමඟ කටයුතු කිරීමට ඇති බව අභ්යන්තර UI පුස්තකාලය ඇති /Date(msecs)/
, මුලින් ගැන මෙහි ඉල්ලා, සහ JSON.NET ගේ, වැනි ඇතුළු බොහෝ JSON ගේ දිනය දක්වන 2014-06-22T00:00:00.0
. මීට අමතරව දශමස්ථාන 3 ක් හැර වෙනත් කිසිවක් සමඟ කටයුතු කිරීමට පැරණි අයිඊයට ඇති නොහැකියාව සමඟ අප කටයුතු කළ යුතුය .
අපි කුමන ආකාරයේ දිනයක් පරිභෝජනය කරනවාදැයි අපි මුලින්ම හඳුනාගෙන, එය සාමාන්ය ජාවාස්ක්රිප්ට් Date
වස්තුවකට විග්රහ කර , පසුව එය සංයුති කරන්නෙමු.
1) මයික්රොසොෆ්ට් දිනය ආකෘතිය හඳුනා ගන්න
// Handling of Microsoft AJAX Dates, formatted like '/Date(01238329348239)/'
function looksLikeMSDate(s) {
return /^\/Date\(/.test(s);
}
2) ISO දිනය ආකෘතිය හඳුනා ගන්න
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) MS දිනය ආකෘතිය විග්රහ කරන්න:
function parseMSDate(s) {
// Jump forward past the /Date(, parseInt handles the rest
return new Date(parseInt(s.substr(6)));
}
4) අයිඑස්ඕ දිනය ආකෘතිය විග්රහ කරන්න.
සෑම විටම මිලි තත්පර තුනක් ඇති වන පරිදි වෙනස් කරන ලද සම්මත අයිඑස්ඕ දිනයන් හෝ අයිඑස්ඕ දිනයන් සමඟ අප කටයුතු කරන බවට සහතික වීමට අපට අවම වශයෙන් ක්රමයක් තිබේ ( ඉහත බලන්න ), එබැවින් කේතය පරිසරය අනුව වෙනස් වේ.
4a) සම්මත ISO දිනය ආකෘතිය විග්රහ කරන්න, පැරණි ගැටළු සමඟ සාර්ථකව කටයුතු කරන්න:
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;
}
4b) ස්ථාවර මිලි තත්පර තුනක දශම ස්ථාන සහිත අයිඑස්ඕ ආකෘතිය විග්රහ කරන්න - වඩා පහසු:
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 හි Ajax ශ්රිතය භාවිතා කරන්නේ නම්, ඔබට සියලු ඩේටයිම් ගුණාංග දිනය වස්තු බවට පරිවර්තනය කළ හැකිය:
// 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/
අවාසනාවට, දින වකවානු ගෝලීයව විග්රහ කිරීම සඳහා ඔබට පැරණි එවාල් මාර්ගයට මාරුවිය යුතුය - එසේ නොමැතිනම් ඒවා පසු විග්රහයෙන් වඩාත් සිද්ධි ආකාරයෙන් පරිවර්තනය කළ යුතුය.