यह संशोधित करना वास्तव में संभव है कि डेट ऑब्जेक्ट को जेएसओएन में कैसे क्रमबद्ध किया जाएगा। रिवाइवर फ़ंक्शन के साथ, एक द्वि-दिशात्मक समाधान बनाया जा सकता है जो स्वचालित रूप से क्रमबद्धरण पर काम करेगा और आसानी से deserialization पर उपयोग किया जा सकता है।
सबसे पहले इस तरह क्रमबद्धता को संशोधित:
> json = JSON.stringify({test:new Date()});
"{"test":"{timestamp}1380164268633"}"
तो फिर तुम एक बना सकते हैं:
Date.prototype.toJSON = function() { return "{timestamp}+" . this.getTime() }
यह एक मार्कर के रूप में एक उपसर्ग के साथ एक यूनिक्स टाइमस्टैम्प में एक तिथि वस्तु का प्रतिनिधित्व बदल जाएगा रिवाइवर फ़ंक्शन जो स्वचालित रूप से इन मानों को फ़िल्टर करेगा:
function json_deserialize_helper(key,value) {
if (typeof value === 'string') {
var regexp;
regexp = /^{timestamp}(\d*)$/.exec(value);
if (regexp) {
return new Date(+regexp[1]);
}
}
return value;
}
(क्रेडिट : इस कोड मूल रूप से एक संबंधित सवाल में इस उत्तर से नकल किया गया था: https://stackoverflow.com/a/14509447/2572897)
इस सेटअप के साथ
अब, पहले से हमारे परिणाम की अक्रमांकन फिर एक दिनांक वस्तु का परिणाम देगा:
> JSON.parse(json, json_deserialize_helper);
Object {test: Thu Sep 26 2013 04:57:48 GMT+0200 (CEST)}
या आप चुन सकते हैं क्रमबद्धता को संशोधित करने के लिए नहीं, लेकिन इसके बजाय मानक क्रमबद्धता प्रारूप को पकड़ने के लिए regexp का उपयोग करें:
function json_deserialize_helper(key,value) {
if (typeof value === 'string') {
var regexp;
regexp = /^\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d.\d\d\dZ$/.exec(value);
if (regexp) {
return new Date(value);
}
}
return value;
}
उदाहरण:
> json = JSON.stringify({test:new Date()})
"{"test":"2013-09-26T03:05:26.563Z"}"
> JSON.parse(json, json_deserialize_helper)
Object {test: Thu Sep 26 2013 05:05:26 GMT+0200 (CEST)}
स्रोत
2013-09-26 03:01:05
संभवतः आप इन तिथियों को स्थानीय स्टोरेज में स्टोर करने के लिए क्रमबद्ध कर रहे हैं। उस स्थिति में, आप इस तरह के एग्रो से बच सकते हैं और रबू जैसे रैपर लाइब्रेरी का उपयोग कर समान कर सकते हैं। –