toLocaleDateString() в IE возвращает строку из 14 символов - это ошибка

Пожалуйста, просмотрите http://jsbin.com/mehowehase/1/edit?html,js,console

var dt = new Date();
var x = dt.toLocaleDateString();
console.log("length : "+x.length);
var arr = x.split("/");
console.log("month : "+parseInt(arr[0],10));

В приведенном выше примере длина x равна 14 в IE и 9 в других браузерах. Также значение месяца указывается как NaN. Это ошибка в IE. Как мы можем это исправить.


person dev    schedule 03.11.2015    source источник


Ответы (4)


Это ошибка в IE11. Вы можете найти временное решение этой проблемы здесь

В основном вам нужно заменить U + 200E (ОТМЕТКА СЛЕВА НАПРАВО).

console.log((new Date()).toLocaleDateString().replace(/\u200E/g, ''));
person Vlad Bezden    schedule 15.03.2016

Для меня в Chrome 42.0 строковый вывод toLocaleDateString — «11/3/2015». Для Internet Explorer 11.0.9 это «вторник, 03 ноября 2015 г.». Вам придется изменить свой синтаксический анализ, чтобы прочитать формат, который выводит Internet Explorer, он содержит всю необходимую информацию, просто в другом формате.

person John Biddle    schedule 03.11.2015
comment
Спасибо за ваш ответ Джон. Internet Explorer тоже выдает мне 3.11.2015. Как мы можем справиться с этим, чтобы один и тот же фрагмент кода работал во всех браузерах. - person dev; 04.11.2015

Решил вот так

var day = arr[1];
var month = arr[0];
var year = arr[2];
if(isNaN(month)){
   var curr = "";
   for (var i = 0; i < month['length']; i++) {
      if(!isNaN(month.charAt(i)))
         curr += parseInt(month.charAt(i));
   }
   month = curr;
}
console.log("month: "+parseInt(month,10));
person dev    schedule 03.11.2015
comment
Это будет работать только в том случае, если в вашем системном формате установлены короткие даты И вы используете формат даты мм/дд/гггг. Если вы хотите узнать месяц, просто спросите объект dt -- var month=dt.month; - person Robert McKee; 04.11.2015

Это не ошибка. Метод toLocaleDateString в IE возвращает строку Unicode, а ваш код ее не ожидает. Например, первый символ в IE (для меня и моей локали (en-US)) — это 8206, который является символом метки слева направо, поэтому ваш parseInt не работает. Вся последовательность

8206,49,49,8206,47,8206,51,8206,47,8206,50,48,49,53

который имеет длину 14 символов и выглядит как «11/3/2015».

Почему ты не делаешь этого:

var dt=new Date();
var day=dt.day;
var month=dt.month;
var year=dt.year;
person Robert McKee    schedule 03.11.2015
comment
Есть ли способ удалить или заменить эти 8206, чтобы они вели себя так же, как и в других браузерах. Спасибо. - person dev; 04.11.2015
comment
Вывести можно нормально. Если вы хотите узнать месяц, почему вы конвертируете дату в строку, а затем пытаетесь ее проанализировать? - person Robert McKee; 04.11.2015