2012-07-15 20 views
22

का उपयोग करते समय दिनांक() के साथ समस्याएं मैं जावास्क्रिप्ट का उपयोग करके दो बार के बीच अंतर की गणना करने की कोशिश कर रहा हूं। यह सिर्फ मूल गणित है लेकिन मुझे JSON.stringify() और JSON.parse() का उपयोग करते समय इसके साथ कुछ समस्याएं प्रतीत होती हैं।JSON.stringify() और JSON.parse()

यदि आप सोच रहे हैं कि मैं JSON.stringify() फ़ंक्शन को क्यों लागू कर रहा हूं, तो ऐसा इसलिए है क्योंकि मैं क्लाइंट पक्ष पर कुछ डेटा स्टोर करने के लिए स्थानीय संग्रहण का उपयोग करता हूं और जब भी ग्राहक मेरी वेबसाइट पर फिर से उतरता है तो इसका उपयोग करता है (यह तेज़ तरीका है सर्वर के लिए और अनुरोध करने के बजाय)। वह डेटा आमतौर पर थोड़ी देर में अपडेट होता है (मैं किसी अन्य वेबसाइट से एपीआई के माध्यम से डेटा को पकड़ रहा हूं), इसलिए मैंने data_update वैरिएबल सेट किया है और मैं इसे अन्य डेटा के साथ संग्रहीत कर रहा हूं।

इस तरह से मैं स्थानीय भंडारण से संग्रहित डेटा को पकड़ रहा हूं और जांचता हूं कि data_update (जो दिनांक/समय है) के बीच का अंतर और समय/दिनांक जब चेक किया गया है और देखें कि यह एक सप्ताह से अधिक है या नहीं/दिन/आदि।

इसलिए यही कारण है कि मैं JSON फ़ंक्शंस का उपयोग कर रहा हूं। मेरी समस्या यह है कि जब मैं स्थानीय भंडारण से डेटा पार्स कर रहा हूं, तो दिनांक Date() ऑब्जेक्ट से अलग दिखता है।

मैं प्रति अगले आपरेशन करने के लिए कोशिश कर रहा हूँ कहते हैं:

var x = JSON.parse(JSON.stringify(new Date())); 

var y = JSON.parse(this.get_local_storage_data(this.data_cache_key)); // the data object stored on local storage 

var q = y.data_update; // this is the variable where the Date() was stored 

console.log(Math.floor((x-q)/1000)); 

ऊपर null वापस आ जाएगी। इसके अलावा जब मैं Math.floor(x) परिणाम देखना चाहता हूं, तो यह null फिर से लौटाता है।

तो मैं इस स्थिति में क्या कर सकता हूं? क्या इसे ठीक करने का कोई तरीका है ?

+0

आप द्वारा इस तरह आक्रामक व्यवहार से बचने कर सकते हैं स्ट्रिंग/पार्स के बजाय रबू जैसे स्थानीय स्टोरेज रैपर का उपयोग करके जिसमें इसके अलावा कई अन्य त्रुटियां हैं। –

उत्तर

43

आप एक तिथि के लिए JSON.stringify के उत्पादन को देखें, तो आपको लगता है कि यह दिखाई देगा:

एक स्ट्रिंग में
JSON.stringify(new Date()) 

परिणाम। जेएसओएन में डेट ऑब्जेक्ट्स का आदिम प्रतिनिधित्व नहीं है जो JSON.parse स्वचालित रूप से डेट ऑब्जेक्ट में वापस आ जाएगा।

दिनांक वस्तु के निर्माता एक तारीख स्ट्रिंग ले जा सकते हैं, तो आप ऐसा करके दिनांकों में वापस उन स्ट्रिंग मान बदल सकते हैं:

var x = new Date(JSON.parse(JSON.stringify(new Date()))); 

फिर गणित काम करेंगे।

x = new Date(JSON.parse(JSON.stringify(new Date()))) 
y = new Date(JSON.parse(JSON.stringify(new Date()))) 
y - x 
=> 982 
15
JSON.stringify(new Date()) 

रिटर्न

"2013-10-06T15: 32: 18.605Z"

शुक्र है: Date.toISOString()

+0

यह जानकर अच्छा लगा कि 'JSON.stringify() 'दृश्यों के पीछे' date.toISOString() 'का उपयोग करता है। इसने मेरा कोड बहुत स्पष्ट बना दिया। –

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