Maison > Article > interface Web > Native js implémente les compétences date linkage_javascript
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.