2012-10-16 7 views
8

मैं निम्नलिखित जावास्क्रिप्ट के लिए IE8 पर एक त्रुटि हो रही है:IE8 तारीख() संगतता त्रुटि

<script type="text/javascript"> 
    //when html doc is all ready 
    $(document).ready(function() { 
     var socket = io.connect(); 
     var room = 'public'; 
     socket.emit('join', room); 

     socket.on('message', function (data) { 
      var output = ''; 
      output += '<div class="trace-content">'; 
      output += ' <div class="mname">' + data.name + '</div>'; 
      output += ' <div class="mdate">' + data.date + '</div>'; 
      output += ' <p class="mtext">' + data.message + '</p>'; 
      output += '</div>'; 

      $(output).prependTo('#traces'); 
     }); 

     $('button').click(function() { 
      var date = new Date().toISOString(); 
      socket.emit('message', { 
       name: $('#name').val(), 
       message: $('#message').val(), 
       date: date.slice(2,10) + ' ' + date.slice(11, 19) 
      }); 
     }); 
    }); 
</script> 

समस्या लाइन में हो रहा है:। वर तारीख = new Date() toISOString(); मुझे समस्या को इंगित करने में समस्या हो रही है कि वास्तव में समस्या क्या है। सब कुछ ठीक काम करने लगता है; बस उस बटन पर क्लिक करें और कोड के माध्यम से पालन करें। कोई विचार?

उत्तर

24

आईई 8 .toISOString() का समर्थन नहीं करता है। आप (Mozilla से) एक परत के रूप में इस कोड का उपयोग कर सकते हैं:

if (!Date.prototype.toISOString) {   
    (function() {   
     function pad(number) { 
      var r = String(number); 
      if (r.length === 1) { 
       r = '0' + r; 
      } 
      return r; 
     }  
     Date.prototype.toISOString = function() { 
      return this.getUTCFullYear() 
       + '-' + pad(this.getUTCMonth() + 1) 
       + '-' + pad(this.getUTCDate()) 
       + 'T' + pad(this.getUTCHours()) 
       + ':' + pad(this.getUTCMinutes()) 
       + ':' + pad(this.getUTCSeconds()) 
       + '.' + String((this.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5) 
       + 'Z'; 
     };  
    }()); 
} 
+0

कोड का अच्छा सरल टुकड़ा। धन्यवाद! – dk123

3
बेशक

आपको एक त्रुटि http://kangax.github.com/es5-compat-table मिलता है। Google में date.prototype.toISOString() पॉलीफिल देखें। मिले इस https://gist.github.com/1044533

सार से:

// thanks to @fgnass and @subzey for their awesome golf skills 
// annotation by @fgnass 

function(a){ 
    a=this; 
    return (
    1e3 // Insert a leading zero as padding for months < 10 
    -~a.getUTCMonth() // Months start at 0, so increment it by one 
    *10 // Insert a trailing zero as padding for days < 10 
    +a.toUTCString() // Can be "1 Jan 1970 00:00:00 GMT" or "Thu, 01 Jan 1970 00:00:00 GMT" 
    +1e3+a/1 // Append the millis, add 1000 to handle timestamps <= 999 
    // The resulting String for new Date(0) will be: 
    // "-1010 Thu, 01 Jan 1970 00:00:00 GMT1000" or 
    // "-10101 Jan 1970 00:00:00 GMT1000" (IE) 
    ).replace(
     // The two digits after the leading '-1' contain the month 
     // The next two digits (at whatever location) contain the day 
     // The last three chars are the milliseconds 
     /1(..).*?(\d\d)\D+(\d+).(\S+).*(...)/, 
    '$3-$1-$2T$4.$5Z') 
} 

नोट: यह सबसे पठनीय कोड या polyfill का सबसे अच्छा उदाहरण नहीं हो सकता है लेकिन यह इतना है कि यह एक है सार में टिप्पणी के अनुसार काम करने लगती है त्वरित प्रतिलिपि/पेस्ट समाधान।

+0

वाह, मैं उस कोड को बनाए रखना नहीं चाहता :) :) (गोल्फ कोड यह पता लगा रहा है कि कम से कम वर्णों में कुछ कैसे पूरा किया जाए)। – Bill

+0

टिप्पणियां पढ़कर यह 140bytes उदाहरण है। मेरा मुद्दा ओपी को दिखाना है कि उसे क्या देखना चाहिए। इसका मतलब कॉपी/पेस्ट समाधान होना है। टिप्पणियों का अर्थ यह है कि बेहतर विकल्प हैं लेकिन लोग आईई 6 और अन्य ब्राउज़रों में काम करने की रिपोर्ट करते हैं। – elclanrs

+0

विस्तृत उत्तर के लिए धन्यवाद। मैं निश्चित रूप से उस तालिका में देख रहा हूं जिसे आपने लिंक किया है। मैंने बिल के जवाब को स्वीकार करना चुना, हालांकि पूरी तरह से इस तथ्य के कारण मुझे याद रखना होगा कि इस जटिलता का एक कोड भविष्य में बिंदुओं में क्या करेगा; महान मदद हालांकि, धन्यवाद! – dk123

0

आप इसके बजाय toJSON method का उपयोग क्यों नहीं कर रहे हैं? यह आईई 8 द्वारा समर्थित है।

+0

यह प्रश्न का उत्तर नहीं प्रदान करता है। किसी लेखक से स्पष्टीकरण की आलोचना या अनुरोध करने के लिए, अपनी पोस्ट के नीचे एक टिप्पणी छोड़ दें। - [समीक्षा से] (/ समीक्षा/कम गुणवत्ता वाली पोस्ट/10597816) –

+0

@ जोनसुरेल क्या आपने उस विधि का उपयोग करने का प्रयास किया था? यह उसकी समस्या को ठीक करता है क्योंकि [toJSON' को कॉल करने से तारीख ऑब्जेक्ट के मान का प्रतिनिधित्व करने वाली स्ट्रिंग लौटाती है] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toJSON# डिस्क्रिप्शन)। – Knu