2016-07-25 204 views
0

我用下面的转换贾拉利链接公历:当我使用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

如果在xx,nn和mmm上执行'''console.log'',会发生什么? –

+0

我刚查过,这段代码正在工作。我不知道你有什么问题。试试alert(jjj +''+ yyyt +''+ kik);你会得到数字结果...不是NaN –

+0

检查变量的适当工具是[控制台](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; 
     })); 
    } 

如果您有另一个自定义代码告诉我,我将不胜感激。 感谢您的考虑。

相关问题