2012-10-19 3 views
5

हमारा आवेदन भारी जावास्क्रिप्ट (jQuery) पर निर्भर करता है। तो बहुत सारे 'एप्लिकेशन/जेसन' अनुरोध हैं।एएसपी.नेट एमवीसी में तिथियों से निपटने का सबसे अच्छा तरीका - जावास्क्रिप्ट एप्लिकेशन

हम कुछ समय के लिए तारीखों के साथ संघर्ष कर रहे हैं, लेकिन हमारे प्रयासों के बावजूद हम एएसपी.नेट एमवीसी अनुप्रयोग में इससे निपटने का तरीका नहीं समझ पाए।

यहाँ हम क्या चाहते हैं:

  1. सर्वर साइड (अधिमानतः DateTimeKind.Utc के साथ) पर क्रमानुसार/deserialize दिनांक समय वस्तुओं।
  2. ग्राहक पक्ष पर दिनांक वस्तु के साथ काम करें। यूटीसी में इसके साथ काम करें। किसी भी तरह प्रारूप प्रारूप।

यहाँ समस्याएं हैं:

  1. दिनांक ग्राहक वस्तु अंत उपयोगकर्ता के समय क्षेत्र के साथ हमेशा होता है। JSON.stringify(new Date()) स्वचालित रूप से एक शिफ्ट करता है।

    JSON Stringify changes time of date because of UTC

    यह सवाल सहायक थोड़ा, लेकिन हम इसे सर्वर को भेजने से पहले दिनांकों शिफ्ट करने के लिए याद करने के लिए की जरूरत है। हमें यह भी याद रखना होगा कि new Date('2012-10-19T10:23:47.778Z') हम जानते हैं कि JSON तिथियों से अवगत नहीं है, लेकिन JSON.parse का एनालॉग होना अच्छा होगा जो तिथियों का विश्लेषण करेगा।

  2. हम न्यूटन Json.net क्रमानुसार करने/deserialize दिनांक का उपयोग करें, लेकिन यह DateTimeKind.Unspecified में यह होता है

प्रश्न:

वहाँ के साथ काम करने में एक सुंदर तरीका है सर्वर और क्लाइंट दोनों पर दिनांक? हमें पूरे एप्लिकेशन में क्रॉस-कटिंग चीज के रूप में इसकी आवश्यकता है।

युपीडी:

मैं इसे और अधिक स्पष्ट रूप डाल करने के लिए किया था। हमारे आवेदन में हमें ग्राहक समय क्षेत्र को ध्यान में रखना आवश्यक नहीं है क्योंकि हम केवल तारीखों के साथ काम करते हैं।

तो अगर सर्वर की ओर 2012-10-19T10:23:47.778Z', हम दिनांक वस्तु की जरूरत है:

Fri Oct 19 2012 10:23:47 GMT+0300 (Kaliningrad Standard Time)

नहीं

Fri Oct 19 2012 13:23:47 GMT+0300 (Kaliningrad Standard Time) (दिनांक स्थानांतरित कर दिया है)

+0

क्या 'JSON.stringify' तारीख * से * यूटीसी को परिवर्तित नहीं करता है? – James

+0

इन समस्याओं का सामना करने के बाद, कुछ लड़के ने मुझे निम्नलिखित से पूछा: "क्या आपको वास्तव में क्लाइंट या केवल सही नोटेशन पर ऑब्जेक्ट की आवश्यकता है?"। वह मेरे मामले में सही था और सही संस्कृति द्वारा स्वरूपित सही तिथि की स्ट्रिंग नोटेशन वापस करने का फैसला किया। –

उत्तर

1

शायद सबसे अच्छा तरीका है एक समय मूल्य के रूप में भेजने के लिए है मिलीसेकंड 1 9 70-01-010000: 00: 00Z (यानी यूटीसी) के बाद, तो आप केवल new Date(timeValue) कर सकते हैं और आपकी डेट ऑब्जेक्ट उस यूटीसी समय पर सेट है। यह क्लाइंट सिस्टम समय क्षेत्र सेटिंग के आधार पर दिनांक और समय वापस कर देगा।

उदा।

alert(new Date(0)); // Thu Jan 01 1970 10:00:00 GMT+1000 (EST) 

यदि आप क्लाइंट पर उस तारीख वस्तु के साथ गड़बड़ (जैसे कि एक दिन जोड़ने) तुम सिर्फ समय मूल्य वापस भेज सकते हैं::

var timeValue = 1350518400000; // 2012-20-18T00:00:00Z 
var date = new Date(timeValue); 
alert(date);     // 2012-10-18T10:00:00UTC+1000 

// add a day 
date.setDate(date.getDate() + 1); 
alert(date.getTime());   // 1350604800000 

दूसरे से पहले timeValue घटाएँ और मेरे लिए आपको 86400000 मिलते हैं, जो कि एक दिन में मिलीसेकंड होता है (यदि दिन डेलाइट सेविंग चेंज सीमा पार करता है तो यह एक घंटे का रास्ता होगा)। जो भी आप अलग-अलग समय के मूल्य के साथ पसंद करते हैं, उसे एक संख्या के रूप में रखें या इसे दिनांक स्ट्रिंग में परिवर्तित करें।

+0

एक गोचा .NET डेटटाइम युग है और टिक जावास्क्रिप्ट की तुलना में अलग हैं। https://msdn.microsoft.com/en-us/library/system.datetime.ticks(v=vs.110).aspx और http://stackoverflow.com/questions/7966559/how-to-convert-javascript -तिथि-वस्तु-टू-टिक – Jasen

4

मैं दृढ़ता से निम्नलिखित पोस्ट सुझाएगा:

कौन सा सामान्य निष्कर्ष यह है कि आप आईएसओ दिनांक का उपयोग करना चाहिए की ओर जाता है:

  • .toJSON() पद्धति पर आधुनिक ब्राउज़र का उपयोग करके क्लाइंट साइड
  • JSON serializatio को ठीक से कॉन्फ़िगर करके सर्वर पर (JsonNetFormatterIsoDateTimeConverter के साथ)
संबंधित मुद्दे

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