2015-08-19 8 views
6

Ich habe Probleme zu verstehen, was mit etwas JavaScript vorgeht, die unterschiedlich in Rande zu verhalten scheinen. kochte es Speziell nach unten zu:Microsoft Edge Javascript toLocaleTimeString falscher Abstand

var testi = new Date().toLocaleTimeString(); 
var len2 = testi.length; 
alert(len2); 

in Rand Meine Länge ist 17, in Chrome und IE es 10 Es scheint einige Phantomplätze in der Zeichenfolge zu sein, ist es auch versucht, meine vermasselt es zu String.

https://jsfiddle.net/m1m8h7ym/

FYI meine Zeitzone ist US Central.

+0

Warum wollen Sie String-Operationen auf dem Ergebnis des toLocaleString, wenn Sie einen Teil des Date-Objekts extrahieren? – marekful

+0

Mein Ziel war es, eine Benutzerzeit String im Format 09.30 gegenüber, und ich habe nicht das Gefühl, die 24-Stunden zu AM/PM und Zeitzone Umwandlung mich wie zu tun, so gestreift ich die Sekunden weg von toLocaleTimeString(), das führte mich diese JavaScript-Fehler zu entdecken (Quirk?) Dies ist einiger älterer Code, dass 10 bis Fenster mit einem paar Benutzer aktualisieren wir sehen gerade begonnen. Arbeitet großartig in IE, Chrome und Firefox – Aaron

Antwort

6

Sieht aus wie Microsoft in the invisible left-to-right mark rutscht. Dies tritt auch in IE11 im Edge-Modus auf. Ich dachte, dies aus, indem in der Zeichenfolge durch jedes Zeichen Looping und es encodeURIComponent()

var output = document.getElementById("output"); 
 
var testi = new Date().toLocaleTimeString(); 
 
var row; 
 
for (var i = 0, len = testi.length; i < len; i++) { 
 
    row = document.createElement("pre"); 
 
    row.innerHTML = encodeURIComponent(testi[i]); 
 
    output.appendChild(row); 
 
}
<div id="output"></div>

vorbei Sie es durch seine Unicode durch Entfernen abstreifen konnte, die durch die in regex erfasst werden können Ausdruck \u200E.

var output = document.getElementById("output"); 
 
var testi = new Date().toLocaleTimeString().replace(/\u200E/g,""); 
 
var row; 
 
for (var i = 0, len = testi.length; i < len; i++) { 
 
    row = document.createElement("pre"); 
 
    row.innerHTML = encodeURIComponent(testi[i]); 
 
    output.appendChild(row); 
 
}
<div id="output"></div>

+0

Großartig! Feste meinen Code für Edge durch Zugabe von '.replace (/ \ u200E/g, "")' auf den Aufruf zu '.toLocaleTimeString()' funktioniert nun in allen Browsern, danke! – Aaron

+1

Ich bin froh, dass ich helfen konnte! Beachten Sie jedoch, dass die von '.toLocaleTimeString()' zurückgegebene Zeichenfolge zwischen verschiedenen Gebietsschemas/Kulturen erheblich variieren kann. Ich wäre nicht überrascht, wenn bei der Verwendung von Hebräisch/Arabisch als Browser-Vorgabe ein Kontrollzeichen von "rechts nach links" erscheint. – Thriggle

+0

gute Warnung, glücklich, das ist eine interne Webseite für eine Multi Zeitzone US-Unternehmen, ich würde das nicht für den externen Gebrauch empfehlen. – Aaron

Verwandte Themen