简单版
var year = Number(prompt("请输入年")); //prompt()接收的是字符类型,进行运算时需要类型转换。
var month = Number(prompt("请输入月"));
var day = Number(prompt("请输入日"));
var days = 0;
//闰年判断
if((year%4==0 && year%100!=0) || (year%400==0 && year%3200!=0) || year%172800==0){
var leap = 1;
}else{
var leap = 0;
}
switch(month){
/*当变量表达式(month)所表达的量与其中一个case语句中的常量相符时,就执行此case语句后面的语句,
并依次下去执行后面所有case语句中的语句,除非遇到break;语句跳出switch语句为止。
如果变量表达式的量与所有case语句的常量都不相符,就执行default语句中的语句。
*/
case 12: days += 30;
case 11: days += 31;
case 10: days += 30;
case 9: days += 31;
case 8: days += 31;
case 7: days += 30;
case 6: days += 31;
case 5: days += 30;
case 4: days += 31;
case 3: days += 28 + leap;
case 2: days += 31;
case 1: days += day; break;
default: alert("输入错误!"); break;
}
alert(year+"年"+month+"月"+day+"日是"+year+"年的第"+days+"天。");
加入输入判断后的详细代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>输入年月日,并输出该日期是当年的第几天</title>
</head>
<body>
<script>
var days = 0;
while(true){ //设置循环,在输入错误时可重新输入。
var year = Number(prompt("请输入年份")); //prompt()接收的是字符类型,需要进行类型转换。
if(year != null){
if(Number.isInteger(year)){ //用Number.isInteger()方法判断是否为整数
if(year > 0){
//闰年判断
var leap = (year%4==0 && year%100!=0) || (year%400==0 && year%3200!=0) || year%172800==0;
while(true){
var month = Number(prompt("请输入月份"));
if(month != null){
if(Number.isInteger(month)){
if(month>=1 && month<=12){
while(true){
var day = Number(prompt("请输入该月的第几天"));
if(day != null){
if(Number.isInteger(day)){
if(day>=1 && day<=31){
if(month == 2){
if(day==30 || day==31){
alert("2月份没有30号或者31号");
}else if(day == 29){
if(leap == 0){
alert("平年的二月份没有29号");
}else{
days = getDaysByMonth(month);
alert(year+"年"+month+"月"+day+"日是"+year+"年的第"+days+"天。");
break;
}
}else{
days = getDaysByMonth(month);
alert(year+"年"+month+"月"+day+"日是"+year+"年的第"+days+"天。");
break;
}
}else if(month==4||month==6||month==9||month==11){
if(day == 31){
alert("4、6、9、11月没有31号");
}else{
days = getDaysByMonth(month);
alert(year+"年"+month+"月"+day+"日是"+year+"年的第"+days+"天。");
break;
}
}else{
days = getDaysByMonth(month);
alert(year+"年"+month+"月"+day+"日是"+year+"年的第"+days+"天。");
break;
}
}else{
alert("天数的范围是1-31");
}
}else{
alert("请正确的天数!");
}
}else{
alert("请输入一个天数!")
}
}
break;
}else{
alert("月份的范围是1-12");
}
}else{
alert("请正确的月份!");
}
}else{
alert("请输入一个月份!");
}
}
break;
}else{
alert("年份需大于0!");
}
}else{
alert("请输入正确的年份!");
}
}else{
alert("请输入一个年份!")
}
}
//因为switch语句会多次被使用,因此封装一个函数以便多次调用。
function getDaysByMonth(month){
switch(month){
/*当变量表达式(month)所表达的量与其中一个case语句中的常量相符时,就执行此case语句后面的语句,
并依次下去执行后面所有case语句中的语句,除非遇到break;语句跳出switch语句为止。
如果变量表达式的量与所有case语句的常量都不相符,就执行default语句中的语句。
*/
case 12: days += 30;
case 11: days += 31;
case 10: days += 30;
case 9: days += 31;
case 8: days += 31;
case 7: days += 30;
case 6: days += 31;
case 5: days += 30;
case 4: days += 31;
case 3: days += 28 + leap;
case 2: days += 31;
case 1: days += day; break;
//default: alert("输入错误!"); break;
}
return days;
}
</script>
</body>
</html>
关于代码中用到的方法在【JS】输入年月日,并输出该日期。(闰年判断)一文中做了详述,可参考。