Строка даты локали не преобразуется

#javascript #visual-studio

#javascript #visual-studio

Вопрос:

Я пытаюсь преобразовать строку даты локали в дату, предназначенную для IE11, я тестирую ее в Visual Studio 2015 и parseInt возвращает NaN . Вот пример моей функции:

https://jsfiddle.net/4tL8p5fh/

 function convertLocaleDateStringToDate(locale) {
  var numbers = locale.split("/");
  var results = [];
  for (var i = 0; i < numbers.length; i  ) {
    results[i] = parseInt(numbers[i]);
  }
  return new Date(results[2], results[0] - 1, results[1]);
}

dates = [
  "9/30/2016",
  "10/1/2016",
  "1/1/2016",
  "12/31/2016"
];

var root = document.getElementById("root");
dates.forEach(function(ele) {
  root.innerHTML  = convertLocaleDateStringToDate(ele)   "<br />"
})  
 <div id="root">

</div>  

Если я запускаю ту же функцию только в IE11, она работает нормально, о чем свидетельствует jsfiddle . В IE 11 по какой-то причине, когда вы вводите строку даты локали в date, она не может ее преобразовать.

Комментарии:

1. Всегда добавляйте основание parseInt(numbers[i], 10)

2. И обратите внимание, что вы могли бы сделать просто var results = numbers.map(Number);

3. Эти функции отлично работают в моем IE11…

4. добавление основы не исправило это. Я просто запутался, почему jsfiddle отлично работает в IE11, но если я запускаю через VS 15, parseInt возвращает NaN

5. Попробуйте запустить тот же код через VS. Другими словами, создайте пустой веб-проект, добавьте HTML-файл, содержащий только один div элемент и script элемент с приведенным выше кодом, и посмотрите, выполняется ли он. Затем постепенно добавляйте все, что у вас есть в вашем приложении, пока оно не остановится. Тогда у вас есть виновник.

Ответ №1:

Я отправил строку «9/30/2016» в функцию, и я выходил [«9», «30», «2016»] чего и следовало ожидать, но когда я проверил длину цифры «9», то получил 3. Похоже, что в строку добавлены два символа, один перед и один после числовой строки. Я отфильтровал эти лишние символы, и теперь это работает.