Решение месяца включает в себя слишком много условий суждения, если еще не снизит производительность. Рекомендуется использовать синтаксис переключения
Код заключается в следующем:
Кода -копия выглядит следующим образом:
GetDays: функция (год, месяц) {
// var aday = [31,28 | 29,31,30,31,30,31,31,31,30,30,31];
// обработка данных на день февраля
var feddays = Год%4 == 0? 29: 28,
returnDays = '';
var month = месяц <10? месяц = '0'+месяц: месяц.toString ();
Switch (месяц) {
случай '01':
случай '03':
случай '05':
случай '07':
случай '08':
Случай '10':
Дело '12': returndays = 31; перерыв;
Случай '04':
случай '06':
случай '09':
Случай '11': returndays = 30; Break;
Дело '02': returndays = FedDays; Break;
}
return returndays;
}
Полный исходный код:
Кода -копия выглядит следующим образом:
/* Автор: Лаогуйон
---------------------------
Трехсторонняя связь дат, выбор диапазона
---------------------------
параметр
* [String] Цели: '#Год,#месяц,#day'; ID года, месяц, день
* [String] Диапазон: '2013-02-03,2019-09-21'; Диапазон, правильный формат-xxxx-xx-xx
--- Чтобы сохранить код, пожалуйста, передайте правильный параметр диапазона дат
---- Демонстрация ошибок:
(1) Диапазон: '2013-02-03,2019-9-21'-это неправильно, обратите внимание на формат даты
(2) Диапазон: «2013-02-03»-это неправильно, введите полное значение диапазона
(3) Диапазон: «2013-02-03,2016-02-30». Это неправильно, в феврале нет 30 дней.
(3) Диапазон: «2013-02-03,2011-02-30»-это неправильно, диапазон неверный
*
*/
функция gysetdate (opt) {
// elem
var targets = opt.targets.split (',');
this.eyear = this.getId (цели [0] .slice (1));
this.emonth = this.getid (цели [1] .slice (1));
this.eday = this.getId (цели [2] .slice (1));
if (! this.eyear ||! this.emonth ||! this.eday) return;
// значение диапазона
var r = opt.range.indexof (','),
astarts = opt.range.slice (0, r) .split ('-'), // конвертируется в: ['2013', '05', '20']
aedends = opt.range.slice (r+1, opt.range.length) .split ('-'); // конвертируется в: ['2018', '08', '20']
// Тип номера
this.startyear = parseint (astarts [0], 10);
this.startmonth = parseint (astarts [1], 10);
this.startday = parseint (astarts [2], 10);
this.endyear = parseint (afends [0], 10);
это.
this.endday = parseint (поэтап [2], 10);
this.init ();
}
Gysetdate.prototype = {
init: function () {
var _that = это;
// дата инициализации
это.
this.setmonths ({'start': this.startmonth});
this.setdays ({'year': this.startyear, «месяц»: this.startmonth, 'start': this.startday});
// Выбор года
this.eyear.onchange = function () {
var Year = parseint (this.value);
Switch (true) {
case (год == _that.startyear): {
_that.setmonths ({'start': _ that.startmonth});
>
};перерыв;
case (год == _that.endyear): {
_that.setmonths ({'start': 1, 'end': _ that.endmonth});
if (_that.endmonth> 1) {
>
}еще{
>
}
};перерыв;
по умолчанию:{
_that.setmonths ({'start': 1});
_that.setdays ({'start': 1, 'Год': Год, «месяц»: 1});
}
}
}
// месячный выбор
this.emonth.onchange = function () {
var year = parseint (_that.eyear.options [_that.eyear.selectedIndex] .value),
месяц = parseint (this.value);
Switch (true) {
case (год == _ that.endyear && month == _ that.endmonth): {
>
};перерыв;
case (год == _ that.startyear && month == _ that.startmonth): {
>
};перерыв;
по умолчанию:{
_that.setdays ({'start': 1, 'Год': Год, «месяц»: месяц});
}
}
}
},
/*Установлен год, месяц, день
-----------------------------------
Все значения параметров имеют тип числа
*/
// параметры {'start': xx, 'end': xxx}
setyears: function (opt) {
this.eyear.innerhtml = '';
for (var n = opt.start; n <= opt.end; n ++) {
this.eyear.add (новый вариант (n, n));
}
},
// параметры {'start': xx, 'end': xxx}
// параметр «конец» является необязательным, игнорируйте его, и он начинается до декабря
setMonths: function (opt) {
this.emonth.innerhtml = '';
var mests = opt.end || 12;
for (var n = opt.start; n <= месяцы; n ++) {
if (n <10) n = '0'+n;
this.emonth.add (новый вариант (n, n));
}
},
// Параметры {'start': xx, 'Год': xxx, «месяц»: xx, 'star': xx, 'end': xxx}
// Параметр «конец» является необязательным, игнорируйте его, и он начинается до конца этого месяца (оценивается на основе месяца)
setDays: function (opt) {
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 (новый вариант (n, n));
}
},
/* Согласно году и месяцу, верните правильное количество дней, таких как 2016-2, возвращение составляет 29 дней (год бега)
---------------------------------------------------------------
Все значения параметров имеют тип числа
*/
GetDays: функция (год, месяц) {
// var aday = [31,28 | 29,31,30,31,30,31,31,31,30,30,31];
// обработка данных на день февраля
var feddays = Год%4 == 0? 29: 28,
returnDays = '';
var month = месяц <10? месяц = '0'+месяц: месяц.toString ();
Switch (месяц) {
случай '01':
случай '03':
случай '05':
случай '07':
случай '08':
Случай '10':
Дело '12': returndays = 31; перерыв;
Случай '04':
случай '06':
случай '09':
Случай '11': returndays = 30; Break;
Дело '02': returndays = FedDays; Break;
}
return returndays;
},
/* Функция помощника инструмента
-----------------------------------
*/
getId: function (id) {
return document.getElementbyId (id);
}
}
Эффект отображения изображения:
Эффект довольно хорош. Друзья, пожалуйста, украсьте это самостоятельно и используйте в своем собственном проекте.