关于另一种方法实现月份对应天数

来源:7-9 JS对表单元素进行设置5

宇宇子

2021-04-12 22:05:27

问题描述:

为什么一旦换到二月后其他月份一直变成了28天或者29天,只要不是2月好像是正常的

相关代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>年月日</title>
<script type="text/javascript" src="YearMonthDay.js"></script>
</head>
<body onload="ymd()">
<form>
<select name="year" id="year" onchange="selectYmd()"></select>年
<select name="month" id="month" onchange="selectYmd()"></select>月
<select name="day" id="day"></select>日
</form>
</body>
</html>
​//添加下拉框条目方法
function ymd(){
var year=document.getElementById("year");
var month=document.getElementById("month");
var day=document.getElementById("day");
var date=new Date();
var year2=parseInt(date.getFullYear());
initSelect(year,1990,year2);
initSelect(month,1,12);
initSelect(day,1,31);
}
//初始化方法
function initSelect(obj,start,end) {
for(var i=start;i<=end;i++){
obj.options.add(new Option(i,i));
}
}

//删除方法
function deleteSelect(obj,start,end){
for(var i=end;i>=start;i--){
obj.options.remove(i);
}
}

//筛选对应月份天数,并且区分闰年
//如果多的话减去几天
function selectYmd(){
var year=document.getElementById("year");
var month=document.getElementById("month");
var day=document.getElementById("day");
//设置开始以及结束天数,便于调用删除方法删去多余天数
var startDay=0;
var endDay=31;
var m=parseInt(month.value);
if(m==4||m==6||m==9||m==11){
startDay=30;
}else if(m==2){
//判断是不是闰年
var y=parseInt(year.value);
startDay=28;//非闰年28天

if( (y%4==0 && y%100!=0)||y%400==0 ){
//闰年29天
startDay=29;
}
}else{
startDay=31;
}
deleteSelect(day,startDay,endDay);
}


写回答

1回答

好帮手慕阿慧

2021-04-13

同学你好,其他月份也会出错,比如选择6月份后,日的天数是30天。选择7月份,日的天数依然是30天,这是错误的,应该是31天。同学在selectYmd()方法中应该计算出要移除的天数,但没有考虑到添加天数的情况,所以程序会出错。建议同学先设置日的天数为0,再往下拉框中添加天数。
如下:
http://img.mukewang.com/climg/6075059c09b91f5004010133.jpg

祝学习愉快~

0

0 学习 · 16556 问题

查看课程