2016-07-25 110 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; 
     })); 
    } 

如果您有另一個自定義代碼告訴我,我將不勝感激。 感謝您的考慮。

相關問題