2016-07-25 19 views
0

verwendete ich den Link unten für convert Jalali zu Gregorian:Wenn ich parseInt verwende, ist das Ergebnis NaN, warum?

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

ich Daten von Benutzer als String empfangen. Und dies ist der Code ich benutze:

<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> 

Ich benutzen ParseInt in meinem Code und leider das Ergebnis ist Nan, ich meine Variablen überprüft, waren sie alle Saiten. Aber wenn ich sie von String in Integer umwandle, ist das Ergebnis auch NaN. wenn ich String in meine Variablen manuell wie dieser Code gesetzt:

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); 

Alles funktioniert gut, warum?

+0

was passiert, wenn Sie eine '' 'console.log''' auf xx, nn und mmm? –

+0

Ich habe gerade überprüft, dieser Code funktioniert. Ich weiß nicht, wo du ein Problem hast. try alert (jjj + '' + yyyt + '' + kik); und Sie werden Zahlenergebnisse erhalten ... nicht NaN –

+0

Das richtige Werkzeug zum Überprüfen von Variablen ist die [Konsole] (https://getfirebug.com/wiki/index.php/Console_API). Gut alt [alert()] (https://developer.mozilla.org/en-US/docs/Web/API/Window/alert) wandelt alles in Zeichenketten um und verbirgt relevante Informationen. Es ist unmöglich zu sagen, was mit Ihrem Code nicht stimmt, da wir den Inhalt einer Variablen nicht wirklich kennen. –

Antwort

1

NaN bedeutet keine A-Nummer. Vielleicht könnten Sie diesen Teil toString() Teil beseitigen.

<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 könnte helfen, Ihre Frage zu beantworten. Es scheint, dass das erste Zeichen oder einige Zeichen nicht in einen numerischen Wert konvertiert werden können. Das verursacht das Problem.

0

Ich habe es !! Das Problem war, dass die Zeichenfolge, die ich von Benutzern bekomme, persisch/arabisch war. Ich sollte es zu englischen String-Nummern ändern. Ich habe diesen Code verwendet, um das Problem zu lösen:

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

Ich würde mich freuen, wenn Sie einen anderen benutzerdefinierten Code haben, um mir zu sagen. Vielen Dank für Ihre Aufmerksamkeit.