दिलचस्प पोस्ट
सेट का लाभ और विधि बनाम सार्वजनिक वैरिएबल अजगर पांडा के साथ काम करने के लिए नोटबुक में बड़ी सीएसवी फाइल अपलोड करने का सबसे तेज़ तरीका क्या है? क्या एक क्लॉज के दायरे में स्तंभों का क्रम क्या है? पोस्टग्रेएसक्यूएल: एक प्रश्न के लिए पंक्तियों की गणना 'मिनट से' कॉर्स jQuery के AJAX अनुरोध कई प्रोग्रामिंग भाषाओं में स्ट्रिंग अपरिवर्तनीय क्यों हैं? एंड्रॉइड – ऑफ-स्क्रीन देखें कैसे दिखाना है? * .bat एक्सटेंशन का उपयोग करके बैच स्क्रिप्ट को कैसे चलाएं सरणी को अपवाद करने के लिए संकेतक में क्षय नहीं करना चाहिए? मेटा टैग में प्रारंभिक पैमाने, उपयोगकर्ता-स्केलेबल, न्यूनतम-पैमाने, अधिकतम-स्तरीय विशेषता क्या है? एंड्रॉइड ऐप और वेबसर्वर के बीच डेटा को सिंक करें जावास्क्रिप्ट के साथ स्थानीय फ़ाइल का उपयोग क्या "यह" कभी जावा में निरर्थक हो सकता है? "1" बनाने के लिए "2-1" जैसे स्ट्रिंग का गणितीय मूल्यांकन कैसे करें? XSD में XML तत्व की आवश्यकता होती है, जब किसी अन्य तत्व के पास निश्चित मूल्य होता है?

जावास्क्रिप्ट: जो ब्राउज़र आईएसओ -8601 दिनांक स्ट्रिंग का दिनांक के साथ पार्सिंग का समर्थन करते हैं

आईई 8 और सफारी 5 पर आईएसओ -8601 की तारीख "2011-04-26 टी 13: 16: 50 एस" पार्स करने में मैं विफल रहा, लेकिन उसने क्रोम 10, एफएफ 4 पर काम किया। समर्थन काफी मिश्रित लगता है?

क्या किसी वास्तविक स्थिति को पता है कि ब्राउज़र इस प्रारूप को पार्स कर सकते हैं? मैं IE6 मानता हूं, और 7 भी विफल हो जाएगा

var d = Date.parse("2011-04-26T13:16:50Z"); 

वेब के समाधान से एकत्रित समाधान "जावास्क्रिप्ट: जो ब्राउज़र आईएसओ -8601 दिनांक स्ट्रिंग का दिनांक के साथ पार्सिंग का समर्थन करते हैं"

मुझे आज यह मुद्दा था। मैंने पाया कि पलएज एक क्रॉस ब्राउज़र मनोर में आईएसओ 8601 तारीखों को पार्स करने का एक अच्छा तरीका था।

momentjs का उपयोग किसी भिन्न प्रारूप में दिनांक को आउटपुट करने के लिए भी किया जा सकता है।

मैं कहता हूं कि यह केवल तभी आवश्यक है जब कुछ परीक्षणों के ज़रिए,

यहाँ एक है जो मैंने पहले ही लिखा है:

 (function() { var d = window.Date, regexIso8601 = /^(\d{4}|\+\d{6})(?:-(\d{2})(?:-(\d{2})(?:T(\d{2}):(\d{2}):(\d{2})\.(\d{1,3})(?:Z|([\-+])(\d{2}):(\d{2}))?)?)?)?$/; if (d.parse('2011-11-29T15:52:30.5') !== 1322581950500 || d.parse('2011-11-29T15:52:30.52') !== 1322581950520 || d.parse('2011-11-29T15:52:18.867') !== 1322581938867 || d.parse('2011-11-29T15:52:18.867Z') !== 1322581938867 || d.parse('2011-11-29T15:52:18.867-03:30') !== 1322594538867 || d.parse('2011-11-29') !== 1322524800000 || d.parse('2011-11') !== 1320105600000 || d.parse('2011') !== 1293840000000) { d.__parse = d.parse; d.parse = function(v) { var m = regexIso8601.exec(v); if (m) { return Date.UTC( m[1], (m[2] || 1) - 1, m[3] || 1, m[4] - (m[8] ? m[8] + m[9] : 0) || 0, m[5] - (m[8] ? m[8] + m[10] : 0) || 0, m[6] || 0, ((m[7] || 0) + '00').substr(0, 3) ); } return d.__parse.apply(this, arguments); }; } d.__fromString = d.fromString; d.fromString = function(v) { if (!d.__fromString || regexIso8601.test(v)) { return new d(d.parse(v)); } return d.__fromString.apply(this, arguments); }; })(); 

और आपके कोड में केवल हमेशा new Date(...) बजाय Date.fromString(...) उपयोग करें

यह देखने के लिए कि क्या शिम का उपयोग किया जाएगा ब्राउज़र का परीक्षण करें:

http://jsbin.com/efivib/1/edit

सभी प्रमुख ब्राउज़रों में काम करता है, इन संदर्भों का इस्तेमाल किया जाता है:

http://dev.w3.org/html5/spec/common-microsyntaxes.html

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15

http://msdn.microsoft.com/en-us/library/windows/apps/ff743760(v=vs.94).aspx

http://msdn.microsoft.com/en-us/library/windows/apps/wz6stk2z(v=vs.94).aspx

http://msdn.microsoft.com/en-us/library/windows/apps/k4w173wk(v=vs.94).aspx

! – माइक्रोसॉफ्ट कनेक्ट देखने के लिए लॉग इन की आवश्यकता है:

IE 9 3 के अलावा अंक संख्याओं के साथ मिलीसेकंड पर असफल रहा था: (IE10 में तय) https://connect.microsoft.com/iE/feedback/details/723740/date-parse-and-new-date-fail-on-valid -formats

आईई 10 अभी भी है (1/17/2013 के रूप में) जब समय क्षेत्र को छोड़ दिया जाता है (ईसीएमए के अनुसार, यह स्थानीय स्तर पर नहीं, तो Z या UTC को घटा देना चाहिए): https://connect.microsoft.com/iE/feedback/ विवरण / 776,783 / तिथि-पार्स और नई तारीख-fail-ऑन-वैध-प्रारूपों

– इसे पढ़ें यदि आप भविष्य में मानक / भविष्य में जा रहे हैं और आईई टीम को क्यों नहीं पहचान सकते हैं कि उनके आईई 10 का कार्यान्वयन तकनीकी तौर पर गलत है:

ECMAScript-262 v6.0 "थोड़े अधिक आईएसओ 8601 के अनुवर्ती संस्करण में स्थानांतरित होने जा रहा है" यदि टाइम ज़ोन संकेतक छोड़े गए हैं, स्थानीय समय मान लें "… तो अब एक विसंगति है, यह क्रियान्वयन, क्रोम, मोबाइल सफारी और ओपेरा सभी ईसीएमएस्क्रिप्ट -262 v5.1 का पालन करें, जबकि आईई 10, फ़ायरफ़ॉक्स, डेस्कटॉप सफारी सभी ज्यादा आईएसओएसी 801 के अनुरूप ECMAScript-262 v6.0 विनिर्देशन का अनुसरण करते हुए लगते हैं … यह कम से कम कहने में भ्रामक है जब क्रोम या मोबाइल सफारी ट्रिगर खींचते हैं और ईएस 6 कार्यान्वयन के लिए कदम उठाते हैं, तो मुझे लगता है कि यह कार्यान्वयन अल्पसंख्यक में ईएस 5.1 को छोड़कर चलना चाहिए। मैंने पढ़ा है कि यह संस्करण 5.1 की "इरेटा" में सूचीबद्ध है। हालांकि मुझे यह नहीं मिला है। मुझे अधिक राय है कि अभी तक ईएस 6 पर ट्रिगर खींचने में थोड़ी सी शुरुआत है, लेकिन मुझे यह भी राय है कि कोड को व्यावहारिक, आदर्श नहीं होना चाहिए और जहां ब्राउज़र निर्माताओं को स्थानांतरित करना है वहां जाने की आवश्यकता है। उस ने कहा, यह अभी 50/50 निर्णय लगता है, इसलिए नीचे इस कोड का "भविष्य" संस्करण है …

मुझे यह भी उल्लेख करना चाहिए कि कोड का कोई भी संस्करण दूसरे के व्यवहार से मेल करने के लिए "गैर-अनुरुप" ब्राउज़रों को सामान्यीकृत करेगा, क्योंकि यह शिम क्या है;)

यहां ईसीएमएस्क्रिप्ट -262 v6.0 (जावास्क्रिप्ट फ्यूचर) के साथ एक अनुकूल संस्करण है

प्रासंगिक अनुभाग यहां देखें: (यह मुझे मिल सकता है जो स्पेक का एकमात्र ऑनलाइन HTML संस्करण है) http://people.mozilla.org/~jorendorff/es6-draft.html#sec-15.9.1.15

 (function() { var d = window.Date, regexIso8601 = /^(\d{4}|\+\d{6})(?:-(\d{2})(?:-(\d{2})(?:T(\d{2}):(\d{2}):(\d{2})\.(\d{1,})(Z|([\-+])(\d{2}):(\d{2}))?)?)?)?$/, lOff, lHrs, lMin; if (d.parse('2011-11-29T15:52:30.5') !== 1322599950500 || d.parse('2011-11-29T15:52:30.52') !== 1322599950520 || d.parse('2011-11-29T15:52:18.867') !== 1322599938867 || d.parse('2011-11-29T15:52:18.867Z') !== 1322581938867 || d.parse('2011-11-29T15:52:18.867-03:30') !== 1322594538867 || d.parse('2011-11-29') !== 1322524800000 || d.parse('2011-11') !== 1320105600000 || d.parse('2011') !== 1293840000000) { d.__parse = d.parse; lOff = -(new Date().getTimezoneOffset()); lHrs = Math.floor(lOff / 60); lMin = lOff % 60; d.parse = function(v) { var m = regexIso8601.exec(v); if (m) { return Date.UTC( m[1], (m[2] || 1) - 1, m[3] || 1, m[4] - (m[8] ? m[9] ? m[9] + m[10] : 0 : lHrs) || 0, m[5] - (m[8] ? m[9] ? m[9] + m[11] : 0 : lMin) || 0, m[6] || 0, ((m[7] || 0) + '00').substr(0, 3) ); } return d.__parse.apply(this, arguments); }; } d.__fromString = d.fromString; d.fromString = function(v) { if (!d.__fromString || regexIso8601.test(v)) { return new d(d.parse(v)); } return d.__fromString.apply(this, arguments); }; })(); 

उम्मीद है कि यह मदद करता है -कम

किसी भी ब्राउज़र में ISO8601 दिनांक स्वरूप को पार्स करने के लिए सरल कार्य:

 function dateFromISO8601(isoDateString) { var parts = isoDateString.match(/\d+/g); var isoTime = Date.UTC(parts[0], parts[1] - 1, parts[2], parts[3], parts[4], parts[5]); var isoDate = new Date(isoTime); return isoDate; } 

हां, दिनांक। पार्स विभिन्न ब्राउज़रों के लिए संगत नहीं है। आप ऐसा कर सकते हैं:

  • इसके बजाय date.UTC का उपयोग करें, जो दिनांक-स्ट्रिंग को अलग-अलग आदानों में विभाजित करता है
  • एक आवरण पुस्तकालय का उपयोग करें जैसे कि jQuery के पार्सडेट

यदि आप किसी आईएसओ डेट स्ट्रिंग को पार्स करते हैं, तो कुछ पुराने ब्रॉउज़र गलत दिनांक (और नाएन को नहीं) लौटाते हैं

आप सभी ब्राउज़रों में अपनी स्वयं की पद्धति का उपयोग कर सकते हैं या तिथि का उपयोग कर सकते हैं। अगर इसे सही ढंग से कार्यान्वित किया गया है – एक ज्ञात टाइमस्टैम्प की जांच करें।

 Date.fromISO= (function(){ var diso= Date.parse('2011-04-26T13:16:50Z'); if(diso=== 1303823810000) return function(s){ return new Date(Date.parse(s)); } else return function(s){ var day, tz, rx= /^(\d{4}\-\d\d\-\d\d([tT][\d:\.]*)?)([zZ]|([+\-])(\d\d):(\d\d))?$/, p= rx.exec(s) || []; if(p[1]){ day= p[1].split(/\D/).map(function(itm){ return parseInt(itm, 10) || 0; }); day[1]-= 1; day= new Date(Date.UTC.apply(Date, day)); if(!day.getDate()) return NaN; if(p[5]){ tz= parseInt(p[5], 10)*60; if(p[6]) tz += parseInt(p[6], 10); if(p[4]== "+") tz*= -1; if(tz) day.setUTCMinutes(day.getUTCMinutes()+ tz); } return day; } return NaN; } })() 

ईएस 5 स्पेस ISO8601 विशिष्ट से विचलित होता है, विशेषकर जब यह समय-समय के संकेतक / ऑफसेट के बिना तिथियों के उपचार की बात आती है https://bugs.ecmascript.org/show_bug.cgi?id=112 समस्या का वर्णन करते हुए एक बग टिकट है और ऐसा लगता है कि यह ES6 में तय हो जाएगा।

अभी के लिए, मैं एक क्रॉस-ब्राउज़र कार्यान्वयन के लिए https://github.com/csnover/js-iso8601 को देखने की सलाह देता हूं। मैं https://github.com/csnover/js-iso8601/tree/lax का उपयोग करता हूं जो ES5 स्पेक के अनुरूप नहीं है, लेकिन JSON.NET जैसे अन्य JSON सीरियललाइजेशन पुस्तकालयों के साथ बेहतर अंतर है।

मुझे ckozl उत्तर वास्तव में उपयोगी और दिलचस्प मिला, लेकिन regexp सही नहीं है और यह मेरे मामले में काम नहीं किया।

इस तथ्य के अलावा कि मिनट, सेकेंड या मिलिसेक के बिना दिनांक पार्स नहीं किए जाते हैं, आईएसओ 8501 स्पेक कहता है कि '-' और ':' विभाजक वैकल्पिक हैं, इसलिए "2013-12-27" और "20131227" दोनों वैध हैं। मेरे मामले में, यह महत्वपूर्ण है क्योंकि मैं PHP में से जावास्क्रिप्ट चर में सर्वर की तारीख और समय सेट कर रहा हूं:

 var serverDate = new Date(Date.parse("<?php date(DateTime::ISO8601); ?>")); 

यह कोड इस तरह से कुछ उत्पन्न करता है:

 <script> var serverDate = new Date(Date.parse("2013-12-27T15:27:34+0100")); </script> 

महत्वपूर्ण हिस्सा समय क्षेत्र डिजाइनर "+0100" है जहां ':' गायब है। हालांकि फ़ायरफ़ॉक्स सही ढंग से स्ट्रिंग पार्स करता है, IE (11) विफल रहता है (यदि ':' जोड़ा जाता है, तो आईई भी काम करता है)। ज़ोनटाइम और सीकोज़ल द्वारा वर्णित ईसीएमएस्क्रिप्ट विनिर्देशों के बारे में सिरदर्द मेरे मामले में महत्वहीन है, क्योंकि PHP हमेशा समय क्षेत्र डिज़ाइनर को जोड़ता है।

RegExp मैं उपयोग कर रहा हूँ, उस के बजाय ckozl से है:

 var regexIso8601 = /^(\d{4}|\+\d{6})(?:-?(\d{2})(?:-?(\d{2})(?:T(\d{2})(?::?(\d{2})(?::?(\d{2})(?:(?:\.|,)(\d{1,}))?)?)?(Z|([\-+])(\d{2})(?::?(\d{2}))?)?)?)?)?$/; 

ध्यान रखें कि यह regexp सही नहीं है या तो। आईएसओ 8501 सप्ताह विनिर्देश (2007-W01-1 सोमवार, 1 जनवरी 2007), या घंटों और मिनटों में दशमलव आंशिक (18.50 के लिए 18.50, या 18:30:15 के लिए 18: 30.25) की अनुमति देता है। लेकिन वे काफी असामान्य हैं।

पीडी यह उत्तर होना चाहिए, मैं कल्पना करता हूं, मूल chozl उत्तर पर एक टिप्पणी है, लेकिन मुझे काफी प्रतिष्ठा नहीं है 🙁

जैसा कि पहले उल्लेख किया गया है कि आईएसओ 8601 शैली की तिथियां ECMAScript संस्करण 5 में शामिल की गईं, जहां कार्यान्वयन सुसंगत नहीं है, और सभी ब्राउज़रों में उपलब्ध नहीं है। कई स्क्रिप्ट उपलब्ध हैं, लेकिन आप केवल अपना ही दिनांक.पेर्से * विधि जोड़ सकते हैं।

 (function() { //ISO-8601 Date Matching var reIsoDate = /^(\d{4})-(\d{2})-(\d{2})((T)(\d{2}):(\d{2})(:(\d{2})(\.\d*)?)?)?(Z|[+-]00(\:00)?)?$/; Date.parseISO = function(val) { var m; m = typeof val === 'string' && val.match(reIsoDate); if (m) return new Date(Date.UTC(+m[1], +m[2] - 1, +m[3], +m[6] || 0, +m[7] || 0, +m[9] || 0, parseInt((+m[10]) * 1000) || 0)); return null; } //MS-Ajax Date Matching var reMsAjaxDate = /^\\?\/Date\((\-?\d+)\)\\?\/$/; Date.parseAjax = function(val) { var m; m = typeof val === 'string' && val.match(reMsAjaxDate); if (m) return new Date(+m[1]); return null; } }(); 

मैं दिनांक के JSON.parse हाइड्रेशन के लिए उपरोक्त विधि का उपयोग करता हूं …

 JSON.parse(text, function(key, val) { return Date.parseISO(val) || Date.parseAjax(val) || val; }); 

आईएसओ 8601 दिनांक स्वरूप ECMAScript-262 v5 के साथ जोड़ा गया था। इसलिए यदि कोई ब्राउज़र v5 संगत नहीं है, तो आप आईएसओ 8601 स्वरूपों को संभालने में सक्षम होने की उम्मीद नहीं कर सकते।

वे v5 संगत नहीं होने वाले ब्राउज़र्स किसी भी कार्यान्वयन के विशिष्ट दिनांक प्रारूपों का उपयोग कर सकते हैं। उनमें से ज्यादातर कम से कम आरएफसी 822 / आरएफसी 1123 दिनांक प्रारूप का समर्थन करते हैं, हालांकि। उदाहरण:

 var d = Date.parse("Wed, 26 Apr 2011 13:16:50 GMT+0200"); 

माइक्रोसॉफ्ट Sharepoint 2013 भी एक अलग नोडरी का उपयोग कर रहा है जैसे "2013-04-30T22: 00: 00Z"

यदि आप इंटरनेट एक्सप्लोरर 8 (IE8) के साथ संयोजन में Sharepoint 2013 से REST सेवाओं का उपयोग करना चाहते हैं, तो ckozl का समाधान काम नहीं कर रहा है आपको नाएन मिलेगा

regex लाइन को परिवर्तित करें:

 regexIso8601 = /^(\d{4}|\+\d{6})(?:-(\d{2})(?:-(\d{2})(?:T(\d{2}):(\d{2}):(\d{2})(\.(\d{1,3}))?(?:Z|([\-+])(\d{2}):(\d{2}))?)?)?)?$/; 

यह माइक्रोसेकेंड थोड़ा वैकल्पिक बना देगा!

चेयरियो, लियो