2015-08-19 21 views
6

Tôi đang gặp khó khăn khi hiểu những gì đang diễn ra với một số JavaScript có vẻ hoạt động khác trong Edge. Cụ thể luộc nó xuống:Microsoft Edge javascript toLocaleTimeString khoảng cách không chính xác

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

chiều dài của tôi trong Edge là 17, trong Chrome và IE đó là 10 Dường như có một số không gian ảo trong chuỗi, nó cũng hơi say lên cố gắng của tôi để substring nó.

https://jsfiddle.net/m1m8h7ym/

FYI múi giờ của tôi là Trung tâm Hoa Kỳ.

+0

Tại sao bạn muốn thao tác chuỗi trên là kết quả của toLocaleString khi bạn có thể trích xuất bất kỳ phần nào của đối tượng hẹn hò? – marekful

+0

Mục tiêu của tôi là chuỗi thời gian đối diện với người dùng ở định dạng 09:30 sáng và tôi không muốn làm 24 giờ sang AM/PM và chuyển đổi múi giờ, vì vậy tôi bỏ qua số giây của toLocaleTimeString(), dẫn tôi khám phá lỗi JavaScript này (quirk?) Đây là một số mã cũ hơn với một vài người dùng nâng cấp lên cửa sổ 10 mà chúng tôi vừa mới bắt đầu thấy. Được làm việc tuyệt vời trong IE, Chrome và Firefox – Aaron

Trả lời

6

Có vẻ như Microsoft đang trượt ở the invisible left-to-right mark. Điều này cũng xảy ra trong IE11 ở chế độ Edge. I figured này bằng cách lặp qua từng nhân vật trong chuỗi và đi qua nó để 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>

Bạn có thể cởi nó ra bằng cách loại bỏ nó bằng unicode của nó, mà có thể được chụp trong regex bởi biểu thức \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

Tuyệt vời! Sửa mã của tôi cho Edge bằng cách thêm '.replace (/ \ u200E/g," ")' vào cuộc gọi đến '.toLocaleTimeString()' Bây giờ làm việc trong tất cả các trình duyệt, cảm ơn! – Aaron

+1

Vui vì tôi có thể giúp! Chỉ cần lưu ý rằng chuỗi được trả về bởi '.toLocaleTimeString()' có thể khác nhau đáng kể giữa các miền/miền khác nhau. Tôi sẽ không ngạc nhiên nếu dấu kiểm soát "từ phải sang trái" xuất hiện khi sử dụng tiếng Do Thái/tiếng Ả Rập làm mặc định của trình duyệt. – Thriggle

+0

Cảnh báo tốt, may mắn, đây là một trang web nội bộ cho một công ty đa múi giờ Hoa Kỳ, tôi sẽ không đề nghị điều này để sử dụng bên ngoài. – Aaron

Các vấn đề liên quan