我制作了一个脚本来计算我们生日那天过了多少天,但是当它显示它未定义时,我不知道为什么,我没有看到问题,也许你可以帮助我。
var dzien = prompt("Podaj dzień urodzin: ");
var miesiac = prompt("Podaj miesiąc urodzin: ");
var rok = prompt("Podaj rok urodzin: ");
var data = new Date(); //Funkcja w js
var today = data.getDate(); //Pobranie dnia (numer 1->31)
var month = data.getMonth() + 1; //Pobranie miesiąca, w js 0-11 -> dlatego jest +1
var finalR = 0;
if ( month == 1 ) {
var finalR = styczen.iledni/1 + today/1;
} else if ( month == 2) {
var finalR = luty.iledni/1 + today/1;
} else if ( month == 3) {
var finalR = marzec.iledni/1 + today/1;
} else if ( month == 4) {
var finalR = kwiecien.iledni/1 + today/1;
} else if ( month == 5) {
var finalR = maj.iledni/1 + today/1;
} else if ( month == 6) {
var finalR = czerwiec.iledni/1 + today/1;
} else if ( month == 7) {
var finalR = lipiec.iledni/1 + today/1;
} else if ( month == 8) {
var finalR = sierpien.iledni/1 + today/1;
} else if ( month == 9) {
var finalR = wrzesien.iledni/1 + today/1;
} else if ( month == 10) {
var finalR = pazdziernik.iledni/1 + today/1;
} else if ( month == 11) {
var finalR = listopad.iledni/1 + today/1;
} else if ( month == 12) {
var finalR = grudzien.iledni/1 + today/1;
}
if (dzien > 31 || miesiac > 12 || rok > 2016 || dzien <= 0 || miesiac <= 0 || rok <= 0) {
if(dzien > 31 || dzien <= 0){
alert("Nie ma takiego dnia miesiąca! Podaj jeszcze raz.");
var dzien = prompt("Podaj dzień: ");
}
if(miesiac > 12 || miesiac <= 0){
alert("Nie ma takiego miesiąca! Podaj jeszcze raz.");
var miesiac = prompt("Podaj miesiąc: ");
}
if(rok > 2016 || rok <= 0){
alert("Kłamiesz! Podaj prawdziwy rok urodzenia.");
var rok = prompt("Podaj rok: ");
}
}
if (isNaN(dzien) || isNaN(rok)) {
if (isNaN(dzien)){
alert('Musisz wpisać liczbę!');
var dzien = prompt("Podaj dzień: ");
}
if (isNaN(rok)){
alert('Musisz wpisać liczbę!');
var rok = prompt("Podaj rok: ");
}
}
var styczen = { nazwa: "Styczeń", iloscDni: 31, ilezostalo: 335, iledni: 0 };
var luty = { nazwa: "Luty", iloscDni: 29, ilezostalo: 306, iledni: 31 };
var marzec = { nazwa: "Marzec", iloscDni: 31, ilezostalo: 275, iledni: 60 };
var kwiecien = { nazwa: "Kwiecień", iloscDni: 30, ilezostalo: 245, iledni: 91 };
var maj = { nazwa: "Maj", iloscDni: 31, ilezostalo: 214, iledni: 121 };
var czerwiec = { nazwa: "Czerwiec", iloscDni: 30, ilezostalo: 184, iledni: 152 };
var lipiec = { nazwa: "Lipiec", iloscDni: 31, ilezostalo: 153, iledni: 182 };
var sierpien = { nazwa: "Sierpień", iloscDni: 31, ilezostalo: 122, iledni: 213 };
var wrzesien = { nazwa: "Wrzesień", iloscDni: 30, ilezostalo: 92, iledni: 244 };
var pazdziernik = { nazwa: "Październik", iloscDni: 31, ilezostalo: 61, iledni: 274 };
var listopad = { nazwa: "Listopad", iloscDni: 30, ilezostalo: 31, iledni: 305 };
var grudzien = { nazwa: "Grudzień", iloscDni: 31, ilezostalo: 0, iledni: 335 };
var miesiace = { ilosc: 12 };
var lata = { obecnyRok: 2016, ile: 365 };
if ( miesiac == styczen.nazwa || miesiac == "styczen" || miesiac == "styczeń" || miesiac == 1 ){
var daysLeft = styczen.iloscDni - dzien;
var yearsLeft = lata.obecnyRok - rok - 1;
var monthsLeft = styczen.ilezostalo/1 + daysLeft/1;
var finalResult = monthsLeft/1 + (yearsLeft * 365) + finalR/1;
} else if ( miesiac == luty.nazwa || miesiac == "luty" || miesiac == 2){
var daysLeft = luty.iloscDni - dzien;
var yearsLeft = lata.obecnyRok - rok - 1;
var monthsLeft = luty.ilezostalo/1 + daysLeft/1;
var finalResult = monthsLeft/1 + (yearsLeft * 365) + finalR/1;
} else if ( miesiac == marzec.nazwa || miesiac == "marzec" || miesiac == 3){
var daysLeft = marzec.iloscDni - dzien;
var yearsLeft = lata.obecnyRok - rok - 1;
var monthsLeft = marzec.ilezostalo/1 + daysLeft/1;
var finalResult = monthsLeft/1 + (yearsLeft * 365) + finalR/1;
} else if ( miesiac == kwiecien.nazwa || miesiac == "kwiecień" || miesiac == "kwiecien" || miesiac == 4){
var daysLeft = kwiecien.iloscDni - dzien;
var yearsLeft = lata.obecnyRok - rok - 1;
var monthsLeft = kwiecien.ilezostalo/1 + daysLeft/1;
var finalResult = monthsLeft/1 + (yearsLeft * 365) + finalR/1;
} else if ( miesiac == maj.nazwa || miesiac == "maj" || miesiac == 5){
var daysLeft = maj.iloscDni - dzien;
var yearsLeft = lata.obecnyRok - rok - 1;
var monthsLeft = maj.ilezostalo/1 + daysLeft/1;
var finalResult = monthsLeft/1 + (yearsLeft * 365) + finalR/1;
} else if ( miesiac == czerwiec.nazwa || miesiac == "czerwiec" || miesiac == 6){
var daysLeft = czerwiec.iloscDni - dzien;
var yearsLeft = lata.obecnyRok - rok - 1;
var monthsLeft = czerwiec.ilezostalo/1 + daysLeft/1;
var finalResult = monthsLeft/1 + (yearsLeft * 365) + finalR/1;
} else if ( miesiac == lipiec.nazwa || miesiac == "lipiec" || miesiac == 7){
var daysLeft = lipiec.iloscDni - dzien;
var yearsLeft = lata.obecnyRok - rok - 1;
var monthsLeft = lipiec.ilezostalo/1 + daysLeft/1;
var finalResult = monthsLeft/1 + finalR/1 + (yearsLeft * 365);
} else if ( miesiac == sierpien.nazwa || miesiac == "sierpien" || miesiac == "sierpień" || miesiac == 8){
var daysLeft = sierpien.iloscDni - dzien;
var yearsLeft = lata.obecnyRok - rok - 1;
var monthsLeft = sierpien.ilezostalo/1 + daysLeft/1;
var finalResult = monthsLeft/1 + (yearsLeft * 365) + finalR/1;
} else if ( miesiac == wrzesien.nazwa || miesiac == "wrzesień" || miesiac == "wrzesien" || miesiac == 9){
var daysLeft = wrzesien.iloscDni - dzien;
var yearsLeft = lata.obecnyRok - rok - 1;
var monthsLeft = wrzesien.ilezostalo/1 + daysLeft/1;
var finalResult = monthsLeft/1 + (yearsLeft * 365) + finalR/1;
} else if ( miesiac == pazdziernik.nazwa || miesiac == "październik" || miesiac == "pazdziernik" || miesiac == 10){
var daysLeft = pazdziernik.iloscDni - dzien;
var yearsLeft = lata.obecnyRok - rok - 1;
var monthsLeft = pazdziernik.ilezostalo/1 + daysLeft/1;
var finalResult = monthsLeft/1 + (yearsLeft * 365) + finalR/1;
} else if ( miesiac == listopad.nazwa || miesiac == "listopad" || miesiac == 11){
var daysLeft = listopad.iloscDni - dzien;
var yearsLeft = lata.obecnyRok - rok - 1;
var monthsLeft = listopad.ilezostalo/1 + daysLeft/1;
var finalResult = monthsLeft/1 + (yearsLeft * 365) + finalR/1;
} else if ( miesiac == grudzien.nazwa || miesiac == "grudzień" || miesiac == "grudzien" || miesiac == 12){
var daysLeft = grudzien.iloscDni - dzien;
var yearsLeft = lata.obecnyRok - rok - 1;
var monthsLeft = grudzien.ilezostalo/1 + daysLeft/1;
var finalResult = monthsLeft/1 + (yearsLeft * 365) + finalR/1;
}
它基本上是在抛光,但是,styczen - 1月,luty - 2月..
答案 0 :(得分:2)
第一个错误是您声明并分配finalR
变量,而不是重复声明并分配仅在语句内可见的相同变量,因此在第一个if
内只需指定值为finalR
var finalR = styczen.iledni/1 + today/1;
成为:
finalR = styczen.iledni/1 + today/1;
以及所有声明。
然后styczen
以及您在此语句中分配给finalR
的所有其他变量在您粘贴的代码中未定义。您需要在if语句之前移动所有这个块。
var styczen = { nazwa: "Styczeń", iloscDni: 31, ilezostalo: 335, iledni: 0 };
var luty = { nazwa: "Luty", iloscDni: 29, ilezostalo: 306, iledni: 31 };
最后一个if语句中的每个声明都不是必需的。您可以在外面声明每个变量,然后在里面分配它们。如果您需要默认值,您也可以声明并分配它们。
在最后一个if rok
内部也是未定义的,dzien
将永远不会有你的方面,因为你试图重新分配dzien变量,但你在外面没有范围外的语句中重新声明它
很多这部分都是相同的,你可以为最终语句创建一个函数并使用它:
var yourfunc = function(arg1, arg2, arg3, lata, finalR) {
var daysLeft = arg1.iloscDni - arg2;
var yearsLeft = lata.obecnyRok - arg3 - 1;
var monthsLeft = arg1.ilezostalo/1 + daysLeft/1;
var finalResult = monthsLeft/1 + (yearsLeft * 365) + finalR/1;
}
要找出问题所在,您可以在每个浏览器中使用js调试器。
最后@Teemu的评论是对的。