自己写了个笨笨的方法,有点麻烦,想简化也不知道应该改哪里,算了我懒,总算是没有bug了,鹅...应该没有了吧。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<input type="text" value="" id="t1">
<input type="text" value="" id="t2">
<input type="text" value="" id="t3">
<button id="btn">=</button>
<input type="text" value="" id="t4">
</body>
</html>
<script>
var oBtn = document.getElementById("btn");
var oText1 = document.getElementById("t1");
var oText2 = document.getElementById("t2");
var oText3 = document.getElementById("t3");
var oText4 = document.getElementById("t4");
//点击事件绑定函数
oBtn.onclick = function(){
var year = oText1.value;
var mouth = oText2.value;
var day = oText3.value;
// var sumdday = oText4.value;
// console.log(year,mouth,day);
//在点击事件的函数中调用isInputOk()函数
//用于判断输入的实参年月日是否合法
var mm = isInputOk(year,mouth,day);
// console.log(mm);
oText4.value = mm;
}
//判断输入的年月日是否合法
//年在1980-2040之间
//月分为2/(4,7,9,11)/剩下的其他月份
function isInputOk(a,b,c){
if(a>=1980&&a<=2040){
if(b==2){
//是2月且天数在1-29天之内时调用isLeapYear(a,b,c),
//判断是平年的2月还是闰年的2月
if(c>=1&&c<=29){
var aa = isLeapYear(a,b,c);
return aa;
}else{
return "请输入正确的天数";
}
}else if(b==4||b==6||b==9||b==11){
//是4,6,9,11月且天数在1-30天之内时调用isLeapYear(a,b,c),
//判断是平年还是闰年,在isLeapYear()函数中调用了计算天数的函数sumDay(mouthh,dayy2)
//也可以直接调用sumDay(mouthh,dayy2),这就要对此函数进行相关修改
if(c>=1&&c<=30){
var aa = isLeapYear(a,b,c);
return aa;
}else{
return "请输入正确的天数";
}
}else if(b>12||b<1){
//这是不合法的月份,提示用户输入正确的内容
return "请输入正确的月份";
}else{
//这里是剩余的1,3,5,7,8,10,12月的判断
if(c>=1&&c<=31){
var aa = isLeapYear(a,b,c);
return aa;
}else{
return "请输入正确的天数";
}
}
}else{
return "请输入正确的年份";
}
}
// 判断是否闰年
function isLeapYear(yearr,mouthh,dayy2){
var sss = sumDay(mouthh,dayy2);
//闰年直接输出sumDay(mouthh,dayy2)计算的天数
if((yearr%4==0&&yearr%100!=0)||yearr%400==0){
return sss;
}else{
//平年就要判断输入的月份是否是大于2月的
if(mouthh>2){
//大于2月的就要在sumDay(mouthh,dayy2)的值中-1,
//因为在sumDay()函数中默认是闰年的2月天数
if(dayy2>=1&&dayy2<=28){
return sss-1;
}else{
return "请输入正确的天数";
}
}else if(mouthh<2){
return sss;
}else{
//这是平年的1月和2月,直接输出sumDay(mouthh,dayy2)计算的天数
//由于这里是要小于等于2月的,所以并没有计算sumDay()函数中默认的2月
if(dayy2>=1&&dayy2<=28){
return sss;
}else{
return "请输入正确的天数";
}
}
}
}
//计算某年某月的某天是这一年的第几天
//传入从文本框中获取的月份和天数着两个参数
function sumDay(m,d){
var sum = 0;
//这里写一个for循环,循环次数为月份-1,
//最后一个月的默认天数不需要算进结果,用传入的天数代替
//如:传入月份为5,将前4个月的天数相加,再加上5月传入的天数即可
for(var i=1;i<m;i++){
var dayy;
switch (i){
case 1:
dayy = 31;
break;
case 2:
dayy = 29;
break;
case 3:
dayy = 31;
break;
case 4:
dayy = 30;
break;
case 5:
dayy = 31;
break;
case 6:
dayy = 30;
break;
case 7:
case 8:
dayy = 31;
break;
case 9:
dayy = 30;
break;
case 10:
dayy = 31;
break;
case 11:
dayy = 30;
break;
case 12:
dayy = 31;
break;
}
sum += dayy;
}
//将获得的数据转为数字
var total = sum/1 + d/1;
return total;
}
</script>