1-14循环中用if判断大小月好像不成功,好像一直都是执行的sum+=30,这是为什么?

1-14循环中用if判断大小月好像不成功,好像一直都是执行的sum+=30,这是为什么?

//弹出窗口日期输入函数
function inputBirthday(str){
    do{
        var birthDay=prompt("请输入您的"+str);//弹出窗口输入需要的日期信息
        birthDay=parseInt(birthDay);        //将输入的日期字符串转换为整数
    }while(isNaN(birthDay) || birthDay<1);
    //判断转换后的数据是不是非数字或者是否大于0,是非数字或者小于0 则需重新输入
    return birthDay;                        //返回输入后转化为数值的日期
}

//月份输入函数
function inputMonth(){
    do{
        var birthDay=inputBirthday("出生月份");  //输入月份
    }while(birthDay>12);                    //当输入的月份值大于12的时候需要重新输入
    return birthDay;                        //返回输入后转化为数值的日期
}

//日期输入函数
function inputDay(y,m){
    do{
        var birthDay=inputBirthday("出生日期");  //输入日期
    }while(!(isDay(y,m,birthDay)));             //判断日期值输入是否正确,不正确需重新输入
    return birthDay;
}
 
//判断日期值输入是否正确函数
function isDay(y,m,d){
    if(m!=2){
        if(d>31){
            return false;                       //如果日期值大于31,则返回false,表示日期值输入错误
        }else{
            if(d==31){
                if((m<8 && m%2==1) ||(m>7 && m%2==0)) {
                    return true;                //如果日期值是31,并且是大月,则返回true
                }else {return false;}           //如果日期是31,且不是大月,则返回false
            }else return true;
        }
    }else{                                      //如果月份等于2
        if(isLeapYear(y)){                        //月份为2且是闰年的时候
            if(d<=29){                                //日期值小于或等于29,则返回true
                return true;
            }else{return false;}                  //2月,且闰年,日期值大于29,则返回false
        }else {                                   //月份为2且非闰年的时候
            if(d<=28){
                return true;                           //日期值小于或等于28,则返回true
            }else {return false;}                 //2月,非闰年,日期值大于28,则返回false
             }
        }
    }
        

//闰年判断函数
function isLeapYear(y){
    //判断是否为闰年,闰年:是4的倍数并且不是100的倍数,或者是400的倍数的年份是闰年
    if(y%4==0 && y%100!=0){
        return true;
        }else if(y%400==0 ){
             return true;
             }else{
                 return false;
             }
}

//出生日期是一年中第多少天计算函数
function countDate(y,m,d){
    var sum=d;                               //第多少天的 求和变量
    var i=3;
    if(m>1){
        if(m==2){            
            return sum+=31;                   //当月份为2时,返回天数值为31+d
        }else{                                //当月份大于2时
            if(isLeapYear){
                sum+=60;                      //当为闰年时,1月和2月总的天数是60天
            }else{ sum+=59}                   //当为平年时,1月和2月总的天数是59天
            
            while(i<m){                       //当月份大于3时,对天数依据月数 进行循环求和
                if((m<8 && m%2==1) ||(m>7 && m%2==0)){
                    sum+=31;                 //当是大月时,天数加 31天
                }else sum+=30;               //当是小月时,天数加30天
                i++;
            }
            return sum;                       //返回所求得的天数值
        }                       
    }else return sum;                          //当月份为1时,直接返回赋值为day的天数求和变量     
    
}


var year=inputBirthday("出生年份");
var month=inputMonth();
var day=inputDay(year,month);
document.write("您的生日在"+year+"年的第"+countDate(year,month,day)+"天");

//console.log(typeof(year));           以下为检查步骤
//console.log(typeof(month));
//console.log(typeof(day));
//console.log(countDate(year,month,day));

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

你好,如下图:这个应该是i哦,不是m,m的话,是输入的最终月份,假如你输入的是5月,m呢,就一直是5,但是想要加上3,4月的天数(1,2月的在上面步骤中有添加),需要是用i来控制呀,因为i最初是3,然后执行一次之后会是4,这里稍微有点绕你结合代码理解下。

http://img1.sycdn.imooc.com//climg/5a13cc430001d61209640232.jpg

祝学习愉快~

  • 慕粉150949629 提问者 #1
    啊,好像是这样。 谢谢,果然是要别人看才容易发现问题
    2017-11-21 14:54:27
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
前端小白入门系列课程
  • 参与学习           人
  • 提交作业       11218    份
  • 解答问题       36713    个

从一个不会编程的小白到一个老司机是需要过程的,首先得入门,学习基础知识,然后才能进阶,最后再到精通,本专题是你走进前端世界的不二选择!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师