2016-03-25 9 views
7

Ich habe in einem möglichen Fehler mit IE rannte beim Aufruf der JavaScript. length Funktion gibt einen Wert zurück, der um 1 aus ist, wenn die Zeichenfolge von .toLocaleString() abgeleitet wurde.Internet Explorer Returning falsche Stringlänge

var d = new Date(); 
var locale = navigator.language; 
var month = d.toLocaleString(locale, { month: "long"}); 
// month.length will return the length of the month string +1 
//(eg: if month = "March", month.length will return 6.) 

das Codebeispiel von oben Interessanterweise wird true zurück (in IE) nach folgenden Kriterien:

month[0] == ""; 
month[1] == "M"; 
month[2] == "a"; 
month[3] == "r"; 
month[4] == "c"; 
month[5] == "h"; 

In meinem speziellen Fall (Monat [0] sollte "M" sein), Dies verursacht ein Problem, wo ich .slice() den Monat brauche. Beispiel: Wenn der Monat März ist, gibt IE "Ma" für month.slice(0,3) anstelle von "Mar" zurück.

Ist das ein bekannter Fehler mit IE? Gibt es eine Behebung und/oder Abhilfe für dieses Problem?

Führen Sie diese fiddle in IE und Chrome/Firefox/Safari und beachten Sie, wie die month.length in IE falsch ist.

Meine Umwelt:

OS: Win Server 2012 R2

IE Version: 11.0.9600.18231 (Update Version: 11.0.29)

Gebietsschema: Englisch/US

+0

Geben Sie uns Ihr Betriebssystem, das aktuelle Gebietsschema und die Browserversion an. – Knu

+0

Das ist bizarr. Ich bekomme das gleiche Ergebnis. Versuchte .trim() und .replace (/ \ s + /, ""), zeigt aber am Anfang immer noch Leerzeichen. –

+2

Was ist das Ergebnis von 'monate.charCodeAt (0)'? – apsillers

Antwort

7

Also stolperte ich über diesen Beitrag toLocaleDateString error in IE 11

Es scheint, dass es durch die ToLocaleDateString-Funktion verursacht wird zusätzliche LTR und RTL-Zeichen in IE11 hinzugefügt. Einer der Kommentare gab eine Regex-Ersetzungsfunktion, die für mich funktioniert.

month.replace(/[^ -~]/g,''); 

Versuchen Sie hinzufügen, dass nach dem Ausführen der .toLocaleDateString() und es sollte funktionieren. Es hat für mich funktioniert.

Nur ein weiterer Grund für uns, IE zu verachten.

+2

Auch möchten [diese Frage] (http://stackoverflow.com/questions/25574963/ies-tolocalestring-has-strange-characters-in-results) wie für zukünftige Leser verwandt. – Chatoyancy

+0

"Dies ist von Entwurf, so wird der Ausgabetext ordnungsgemäß fließen, wenn mit anderem Text verkettet wird." – Knu

+0

Vielen Dank! Ich habe eine Regex verwendet, um das Datum nach einem Aufruf von toLocaleDateString() zu überprüfen und nicht zu verstehen, warum es nicht auf IE11 -_- funktioniert –