월 결정에는 결정 조건이 너무 많습니다. if else를 사용하면 성능이 크게 저하됩니다. 스위치 구문을 사용하는 것이 좋습니다
코드는 다음과 같습니다.
전체 소스 코드:
this.init();
}
GySetDate.prototype = {
초기화:함수(){
var _that = this;
//初始화일期
this.setYears({'start':this.startYear,'end':this.endYear});
this.setMonths({'start':this.startMonth});
this.setDays({'year':this.startYear,'month':this.startMonth,'start':this.startDay});
// 年选择
this.eYear.onchange = 함수(){
var year = parsInt(this.value);
스위치(true){
사례(연도 == _that.startYear):{
_that.setMonths({'start':_that.startMonth});
_that.setDays({'year':_that.startYear,'month':_that.startMonth,'start':_that.startDay});
};휴식;
사례(연도 == _that.endYear):{
_that.setMonths({'start':1,'end':_that.endMonth});
if(_that.endMonth>1){
_that.setDays({'year':_that.endYear,'month':1,'start':1});
}그밖에{
_that.setDays({'year':_that.endYear,'month':1,'start':1,'end':_that.endDay});
}
};휴식;
기본값:{
_that.setMonths({'start':1});
_that.setDays({'start':1,'year':year,'month':1});
}
}
}
// 月选择
this.eMonth.onchange = 함수(){
var year = parsInt(_that.eYear.options[_that.eYear.selectedIndex].value),
월 = parsInt(this.value);
스위치(true){
사례(연도==_that.endYear&&month==_that.endMonth):{
_that.setDays({'start':1,'year':year,'month':month,'end':_that.endDay});
};휴식;
사례(연도==_that.startYear&&month==_that.startMonth):{
_that.setDays({'year':_that.startYear,'month':_that.startMonth,'start':_that.startDay});
};휴식;
~ ~ 기본값:{
_that.setDays({'start':1,'year':year,'month':month});
}
~
~
}
},
/*연, 월, 일 설정
---------------------------------
매개변수 값은 모두 Number
유형입니다.
*/
// 매개변수 {'start':xx,'end':xxx}
setYears:함수(선택){
This.eYear.innerHTML = '';
for(var n=opt.start;n<=opt.end;n ){
This.eYear.add(new Option(n,n));
}
},
// 매개변수 {'start':xx,'end':xxx}
//'end' 매개변수는 선택사항이며, 무시할 경우 12월부터 시작됩니다.
setMonths:함수(선택){
This.eMonth.innerHTML = '';
var 개월 = opt.end ||
for(var n=opt.start;n<=months;n ){
If(n<10) n = '0' n;
This.eMonth.add(new Option(n,n));
}
},
// 매개변수 {'start':xx,'year':xxx,'month':xx,'star':xx,'end':xxx}
//'end' 매개변수는 선택사항이며, 무시할 경우 이번 달 말일까지 시작됩니다. (월 기준으로 판단)
setDays:함수(선택){
This.eDay.innerHTML = '';
var days = opt.end || this.getDays(opt.year,opt.month);
for(var n=opt.start;n<=days;n ){
If(n<10) n = '0' n;
This.eDay.add(new Option(n,n));
}
},
/* 연도와 월을 기준으로 정확한 일수를 반환합니다. 예를 들어 2016-2, 반환은 29일(실행 연도)입니다
------------------------------------- ------------
매개변수 값은 모두 Number
유형입니다.
*/
GetDays:함수(연도, 월){
// var aDay = [31,28|29,31,30,31,30,31,31,30,31,30,31];
// 2월의 일별 데이터 처리
var FedDays = year%4==0?29:28,
returnDays = '';
var 월 = 월<10?월 = '0' 월:month.toString();
전환(월){
사례 '01':
사례 '03':
사례 '05':
사례 '07':
사례 '08':
사례 '10':
사례 '12': returnDays = 31;break;
사례 '04':
사례 '06':
사례 '09':
사례 '11': returnDays = 30;break;
사례 '02': returnDays = FedDays;break;
}
반품 반품일;
},
/*도구 보조 기능
---------------------------------
*/
GetId:함수(id){
return document.getElementById(id);
}
}
효과 표시:
효과는 나쁘지 않습니다. 친구여, 아름답게 꾸미고 자신의 프로젝트에 사용할 수 있습니다.