2016-07-25 2 views
0

Я использовал ссылку ниже для преобразования Jalali в григорианский:Когда я использую parseInt, результат NaN, почему?

https://github.com/Mds92/MD.BootstrapPersianDateTimePicker/tree/master/MD.BootstrapPersianDateTimePicker/Scripts

Я получаю данные от пользователя, как строка. И это код я использую:

<script> 
    var jj = document.getElementById("fromDate1"), 
      bb = document.getElementById("showMe"), 
      splitOb, yy, mm, dd; 

    bb.onclick = function() { 
     splitOb = jj.value.split("/"); 
     for (var i = 0; i < splitOb.length; i++) { 
      yy = splitOb[0]; 
      mm = splitOb[1]; 
      dd = splitOb[2]; 
     } 

     var xx = yy.trim().toString(), nn = mm.trim().toString(), mmm = dd.trim().toString(); 

     var xxx = parseInt(xx, 10); 
     var nnn = parseInt(nn, 10); 
     var mjj = parseInt(mmm, 10); 
     var hello = toGregorian(xxx, nnn, mjj); 
     alert(hello.gy + "/" + hello.gm + "/" + hello.gd); 

     /* var gh= "1395"; 
     var ghh = parseInt(gh); 
     alert(ghh);*/ 
    }; 
</script> 

Я использовал ParseInt в моем коде, и, к сожалению, результат Нэн, я проверил мои переменные, все из них строки. Но когда я конвертирую их из строки в целое, результат тоже NaN. , когда я устанавливаю строку моих переменных вручную, как этот код:

var jjj = "1395"; 
     var yyyt = "05"; 
     var kik = "04"; 

     var xxx = parseInt(jjj, 10); 
     var nnn = parseInt(yyyt, 10); 
     var mjj = parseInt(kik, 10); 

     var hello = toGregorian(xxx, nnn, mjj); 
     alert(hello.gy + "/" + hello.gm + "/" + hello.gd); 

Все отлично работает, почему?

+0

Что произойдет, если вы выполните '' 'console.log''' на xx, nn и mmm? –

+0

Я только что проверил, этот код работает. Я не знаю, где у вас проблемы. попробуйте оповещение (jjj + '' + yyyt + '' + kik); и вы получите число результатов ... не NaN –

+0

Правильный инструмент для проверки переменных - это [console] (https://getfirebug.com/wiki/index.php/Console_API). Хороший старый [alert()] (https://developer.mozilla.org/en-US/docs/Web/API/Window/alert) передает все в строку, тем самым скрывая соответствующую информацию. Невозможно сказать, что не так с вашим кодом, так как мы действительно не знаем содержание любой переменной. –

ответ

1

NaN означает не число. Возможно, вы можете устранить эту часть toString().

<script> 
    var jj = document.getElementById("fromDate1"), 
      bb = document.getElementById("showMe"), 
      splitOb, yy, mm, dd; 

    bb.onclick = function() { 
     splitOb = jj.value.split("/"); 
     for (var i = 0; i < splitOb.length; i++) { 
      yy = splitOb[0]; 
      mm = splitOb[1]; 
      dd = splitOb[2]; 
     } 

     var xxx = parseInt(yy, 10); 
     var nnn = parseInt(mm, 10); 
     var mjj = parseInt(dd, 10); 
     var hello = toGregorian(xxx, nnn, mjj); 
     alert(hello.gy + "/" + hello.gm + "/" + hello.gd); 

     /* var gh= "1395"; 
     var ghh = parseInt(gh); 
     alert(ghh);*/ 
    }; 
</script> 
0

This может помочь ответить на ваш вопрос. Кажется, что он не может преобразовать первый символ или некоторые из символов в числовое значение. Вот что вызывает проблему.

0

Я ПОЛУЧИЛ ЭТО !! Проблема заключалась в том, что строка, которую я получаю от пользователей, была персидской/арабской. Я должен изменить его на английские строковые числа. Я использовал этот код, чтобы решить эту проблему:

function parseArabic(str) { 
     return Number(str.replace(/[٠١٢٣٤٥٦٧٨٩]/g, function(d) { 
      return d.charCodeAt(0) - 1632; 
     }).replace(/[۰۱۲۳۴۵۶۷۸۹]/g, function(d) { 
      return d.charCodeAt(0) - 1776; 
     })); 
    } 

я бы оценить, если у вас есть другой пользовательский код, чтобы сказать мне. Спасибо за ваше внимание.

Смежные вопросы