La détermination du mois implique trop de conditions de détermination. L'utilisation de if else réduira considérablement les performances. Il est recommandé d'utiliser la syntaxe switch
.Le code est le suivant :
Code source complet :
this.init();
>
GySetDate.prototype = {
init:fonction(){
var _that = ceci;
// 初始化日期
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 = function(){
var année = parseInt(this.value);
changer (vrai){
cas (année == _that.startYear):{
_that.setMonths({'start':_that.startMonth});
_that.setDays({'year':_that.startYear,'month':_that.startMonth,'start':_that.startDay});
};pause;
cas (année == _that.endYear):{
_that.setMonths({'start':1,'end':_that.endMonth});
si(_that.endMonth>1){
_that.setDays({'year':_that.endYear,'month':1,'start':1});
}autre{
_that.setDays({'year':_that.endYear,'month':1,'start':1,'end':_that.endDay});
>
};pause;
par défaut :{
_that.setMonths({'start':1});
_that.setDays({'start':1,'year':year,'month':1});
>
>
>
// 月选择
this.eMonth.onchange = function(){
var année = parseInt(_that.eYear.options[_that.eYear.selectedIndex].value),
mois = parseInt(this.value);
changer (vrai){
cas (year==_that.endYear&&month==_that.endMonth) :{
_that.setDays({'start':1,'year':year,'month':month,'end':_that.endDay});
};pause;
cas (year==_that.startYear&&month==_that.startMonth) :{
_that.setDays({'year':_that.startYear,'month':_that.startMonth,'start':_that.startDay});
};pause;
par défaut :{
_that.setDays({'start':1,'year':year,'month':month});
}
>
},
/*Définir l'année, le mois, le jour
---------------------------------
Les valeurs des paramètres sont toutes de type Number
*/
// Paramètres {'start':xx,'end':xxx}
setYears:fonction(opt){
This.eYear.innerHTML = '';
pour(var n=opt.start;n<=opt.end;n ){
This.eYear.add(new Option(n,n));
>
},
// Paramètres {'start':xx,'end':xxx}
//Le paramètre 'end' est facultatif, s'il est ignoré, cela commencera en décembre
setMonths:fonction(opt){
This.eMonth.innerHTML = '';
var mois = opt.end || 12;
pour(var n=opt.start;n<=mois;n ){
Si(n<10) n = '0' n;
This.eMonth.add(new Option(n,n));
>
},
// Paramètres {'start':xx,'year':xxx,'month':xx,'star':xx,'end':xxx}
//Le paramètre 'fin' est facultatif, s'il est ignoré, il commencera jusqu'à la fin de ce mois (jugé en fonction du mois)
setDays:fonction(opt){
This.eDay.innerHTML = '';
var jours = opt.end || this.getDays(opt.year,opt.month);
pour(var n=opt.start;n<=jours;n ){
Si(n<10) n = '0' n;
This.eDay.add(new Option(n,n));
}
},
/* En fonction de l'année et du mois, renvoie le nombre correct de jours, comme 2016-2, le retour est de 29 jours (année d'exécution)
-------------------------------------------------- ------------
Les valeurs des paramètres sont toutes de type Number
*/
GetDays :fonction (année, mois){
// var aDay = [31,28|29,31,30,31,30,31,31,30,31,30,31];
// Journée de traitement des données en février
var FedDays = année%4==0?29:28,
returnDays = '';
var mois = mois<10?mois = '0' mois:mois.toString();
changer (mois){
cas '01' :
cas '03' :
cas '05' :
cas '07' :
cas '08' :
cas '10' :
cas '12' : returnDays = 31;break;
cas '04' :
cas '06' :
cas '09' :
cas '11' : returnDays = 30;break;
cas '02' : returnDays = FedDays;break;
>
return returnDays ;
},
/*Fonction auxiliaire de l'outil
---------------------------------
*/
GetId:fonction(id){
return document.getElementById(id);
>
>
Affichage des effets :
L'effet n'est pas mauvais, les amis, vous pouvez l'embellir et l'utiliser dans vos propres projets.