Le jugement du mois implique trop de conditions de jugement, si d'autre réduira considérablement la performance. Il est recommandé d'utiliser la syntaxe du commutateur
Le code est le suivant:
La copie de code est la suivante:
Getdays: fonction (année, mois) {
// var aday = [31,28 | 29,31,30,31,30,31,31,31,30,30,31];
// Traitement des données du jour de février
var feddays = an% 4 == 0? 29: 28,
RETROYAGE = '';
var mois = mois <10? mois = '0' + mois: mois.toString ();
commutateur (mois) {
cas «01»:
cas «03»:
cas «05»:
cas «07»:
cas «08»:
cas «10»:
Cas '12': Journaux de retour = 31; Break;
cas «04»:
cas «06»:
cas «09»:
Cas '11': Journaux de retour = 30; pause;
Cas '02': ReturnDays = Feddays; Break;
}
retour des jours de retour;
}
Code source complet:
La copie de code est la suivante:
/ * Auteur: Laoguoyong
------------------------------
Liaison à trois niveaux des dates, sélection de plage
------------------------------
paramètre
* [String] cible: «# année, # mois, # jour»; ID de l'année, mois, jour
* [String] Plage: '2013-02-03.2019-09-21'; plage, le format correct est xxxx-xx-xx
--- Pour enregistrer le code, veuillez passer dans le paramètre de plage de dates correct
---- Démonstration d'erreur:
(1) Gamme: '2013-02-03, 2019-9-21' est erronée, faites attention au format de date
(2) Range: «2013-02-03» est faux, veuillez saisir la valeur complète de la plage
(3) Gamme: '2013-02-03, 2016-02-30' C'est faux, il n'y a pas 30 jours en février
(3) Range: '2013-02-03, 2011-02-30' est faux, la plage est incorrecte
*
* /
fonction gysetdate (opt) {
// elem
var cibles = opt.target.split (',');
this.eyear = this.getId (cibles [0] .slice (1));
this.emonth = this.getId (cibles [1] .slice (1));
this.eday = this.getId (cibles [2] .slice (1));
if (! this.eyear ||! this.emonth ||! this.eday) return;
// valeur de plage
var r = opt.range.indexof (','),
Astarts = opt.range.slice (0, r) .split ('-'), // converti à: ['2013', '05', '20']
aends = opt.range.slice (r + 1, opt.range.length) .split ('-'); // Converti à: ['2018', '08', '20']
// Type de numéro
this.startyear = parseInt (Astarts [0], 10);
this.startmonth = parseInt (Astarts [1], 10);
this.startday = parseInt (Astarts [2], 10);
this.endyear = paSeInt (aends [0], 10);
this.endMonth = paSeInt (aends [1], 10);
this.endday = parseInt (aends [2], 10);
this.init ();
}
Gysetdate.prototype = {
init: function () {
var _That = this;
// Date d'initialisation
this.setyears ({'start': this.startyear, 'end': this.endyar});
this.setMonths ({'start': this.startmonth});
this.setdays ({'année': this.startyear, 'mois': this.startmonth, 'start': this.startday});
// Choix de l'année
this.eyear.onchange = function () {
var année = parseInt (this.Value);
switch (true) {
cas (année == _That.startyear): {
_That.setMonths ({'start': _ that.startmonth});
_That.setDays ({'Year': _ That.Startyear, 'Month': _ That.startmonth, 'start': _ that.startday});
};casser;
cas (année == _That.endyear): {
_That.setMonths ({'start': 1, 'end': _ that.endMonth});
if (_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});
}
};casser;
défaut:{
_That.setMonths ({'start': 1});
_That.setdays ({'start': 1, 'année': année, 'mois': 1});
}
}
}
// Sélection mensuelle
this.emonth.onchange = function () {
var année = parseInt (_that.eyear.options [_That.eyear.selectedIndex] .Value),
mois = parseInt (this.value);
switch (true) {
cas (année == _ That.endyear && mois == _ That.endMonth): {
_That.setdays ({'start': 1, 'année': année, 'mois': mois, 'end': _ that.endday});
};casser;
cas (année == _ That.startyear && mois == _ That.startmonth): {
_That.setDays ({'Year': _ That.Startyear, 'Month': _ That.startmonth, 'start': _ that.startday});
};casser;
défaut:{
_That.setdays ({'start': 1, 'année': année, 'mois': mois});
}
}
}
},
/ * Année fixée, mois, jour
----------------------------------
Toutes les valeurs des paramètres sont de type de nombre
* /
// Paramètres {'start': xx, 'end': xxx}
seyears: fonction (opt) {
this.eyear.innerhtml = '';
pour (var n = opt.start; n <= opt.end; n ++) {
this.eyear.add (nouvelle option (n, n));
}
},
// Paramètres {'start': xx, 'end': xxx}
// La «fin» du paramètre est facultative, l'ignorez, et il commence jusqu'en décembre
setMonths: fonction (opt) {
this.emonth.innerhtml = '';
var mois = opt.end || 12
pour (var n = opt.start; n <= mois; n ++) {
if (n <10) n = '0' + n;
this.emonth.add (nouvelle option (n, n));
}
},
// Paramètres {'start': xx, 'année': xxx, 'mois': xx, 'star': xx, 'end': xxx}
// La «fin» du paramètre est facultative, l'ignorez et commence jusqu'à la fin de ce mois (jugé sur la base du mois)
Setdays: fonction (opt) {
this.eday.innerhtml = '';
var days = opt.end || this.getDays (opt.year, opt.month);
pour (var n = opt.start; n <= jours; n ++) {
if (n <10) n = '0' + n;
this.eday.add (nouvelle option (n, n));
}
},
/ * Selon l'année et le mois, renvoyez le bon nombre de jours, comme 2016-2, le retour est de 29 jours (l'année d'exécution)
--------------------------------------------------------------
Toutes les valeurs des paramètres sont de type de nombre
* /
Getdays: fonction (année, mois) {
// var aday = [31,28 | 29,31,30,31,30,31,31,31,30,30,31];
// Traitement des données du jour de février
var feddays = an% 4 == 0? 29: 28,
RETROYAGE = '';
var mois = mois <10? mois = '0' + mois: mois.toString ();
commutateur (mois) {
cas «01»:
cas «03»:
cas «05»:
cas «07»:
cas «08»:
cas «10»:
Cas '12': Journaux de retour = 31; Break;
cas «04»:
cas «06»:
cas «09»:
Cas '11': Journaux de retour = 30; pause;
Cas '02': ReturnDays = Feddays; Break;
}
retour des jours de retour;
},
/ * Fonction d'assistance à l'outil
----------------------------------
* /
getID: fonction (id) {
return document.getElementById (id);
}
}
Image d'affichage de l'effet:
L'effet est assez bon. Amis, veuillez l'embellir vous-même et l'utiliser dans votre propre projet.