<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
年:<input type="text" id="yearInput">
月:<input type="text" id="monthInput">
日:<input type="text" id="dayInput">
<button id="btn">判断</button>
<input type="text" id="result" disabled="disabled">
</body>
<script>
var yearInp = document.getElementById("yearInput"); //获取元素id
var monthInp = document.getElementById("monthInput");
var dayInp = document.getElementById("dayInput");
var btn1 = document.getElementById("btn");
var result = document.getElementById("result");
btn1.onclick = function () { //点击事件
result.value = isDate(yearInp, monthInp, dayInp);
}
//定义判断年月日是否在1~9999之内合法的函数
function isDate(year, month, day) { //传入参数为获取的元素id,获取文本框内容需要用.value属性
var maxDay = 0; //存储月份日期最大值,判断输入日期是否合法使用
var sum = 0; //存储求和,计算该年第几天
if (year.value <= 9999 && year.value >= 1 && year.value % 1 == 0) { //判断年份是否在1~9999之间,对1求余判断是整数
if (month.value % 1 == 0 && month.value <= 12 && month.value >= 1) { //判断输入的月份是否是在1~12的整数
switch (month.value) { //switch选择相应的月份,给maxDay日期最大值赋值
case '1':
case '3':
case '5': //字符串数字,文本输入框获取的是字符串类型
case '7': //switch里的case匹配表达式是全等 “ === ”,数据和类型都相等才执行代码
case '8':
case '10':
case '12':
maxDay = 31;
break;
case '4':
case '6':
case '9':
case '11':
maxDay = 30;
break;
case '2':
maxDay = year.value % 4 == 0 && year.value % 100 != 0 || year.value % 400 == 0 ? 29 : 28; //三目运算符,判断是否是闰年二月
break;
default:
var error = new Error("出现了意料之外的情况"); //设置控制台报错提示
throw error; //抛出控制台错误
break;
}
var February = year.value % 4 == 0 && year.value % 100 != 0 || year.value % 400 == 0 ? 29 : 28; //闰年二月对应天数
switch (month.value) { // 年月日输入计算 (n = 前n-1月之和 + 当前月的几号)
//switch穿透应用,表达式与case匹配成功后没有break语句则会不匹配下一个case,直接执行下一个case里的代码
case '12': sum += 30; //十一月的31天
case '11': sum += 31; //十月的31天
case '10': sum += 30; //九月的30天
case '9': sum += 31; //八月的31天
case '8': sum += 31; //七月的31天
case '7': sum += 30; //六月的30天
case '6': sum += 31; //五月的31天
case '5': sum += 30; //四月的30天
case '4': sum += 31; //三月的31天
case '3': sum += February; //二月的28/29天
case '2': sum += 31; //1月的31天
case '1': sum += day.value * 1; break; //当前月的天数 获取的为字符串类型,和数字乘法运算隐式转换数字类型
default:
var error = new Error("出现了意料之外的情况");
throw error;
break;
}
if (day.value >= 1 && day.value <= maxDay && day.value % 1 == 0) { //判断输入的日期是合理
return year.value + "年的第" + sum + "天"; //返回输入求和值,当前年的第几天
} else {
var error = new Error("请输入正确的日期");
throw error;
}
} else {
var error = new Error("请输入1~12的月份");
throw error;
}
} else {
var error = new Error("请输入1000~9999的年份"); //设置控制台报错提示
throw error; //抛出控制台错误
}
}
</script>
</html>
JS判断日期是否合法并计算是该年的第几天
最新推荐文章于 2024-07-26 11:41:15 发布