Penilaian bulan melibatkan terlalu banyak kondisi penilaian, jika lain akan sangat mengurangi kinerja. Disarankan untuk menggunakan sintaks sakelar
Kodenya adalah sebagai berikut:
Salinan kode adalah sebagai berikut:
getdays: function (tahun, bulan) {
// var aday = [31,28 | 29,31,30,31,30,31,31,31,30,30,31];
// Pemrosesan Data Hari Februari
var feddays = tahun%4 == 0? 29: 28,
returndays = '';
var bulan = bulan <10? bulan = '0'+bulan: bulan.toString ();
Switch (bulan) {
kasus '01':
kasus '03':
kasus '05':
kasus '07':
kasus '08':
kasus '10':
kasus '12': returndays = 31; break;
kasus '04':
kasus '06':
kasus '09':
Kasus '11': Returndays = 30; break;
kasus '02': returndays = feddays; break;
}
kembali hari kembali;
}
Kode Sumber Lengkap:
Salinan kode adalah sebagai berikut:
/* Penulis: Laoguoyong
------------------------------
Tautan tiga tingkat tanggal, pemilihan jangkauan
------------------------------
parameter
* [String] target: '#tahun,#bulan,#day'; ID Tahun, Bulan, Hari
* [String] Range: '2013-02-03.2019-09-21'; rentang, format yang benar adalah xxxx-xx-xx
--- Untuk menyimpan kode, silakan lulus dalam parameter rentang tanggal yang benar
---- demonstrasi kesalahan:
(1) Kisaran: '2013-02-03.2019-9-21' salah, perhatikan format tanggal
(2) Kisaran: '2013-02-03' salah, silakan masukkan nilai rentang lengkap
(3) Kisaran: '2013-02-03.2016-02-30' Itu salah, tidak ada 30 hari di bulan Februari
(3) Kisaran: '2013-02-03.2011-02-30' salah, kisarannya salah
*
*/
fungsi gysetdate (opt) {
// elem
var target = opt.targets.split (',');
this.eyear = this.getId (target [0] .slice (1));
this.emement = this.getId (target [1] .slice (1));
this.eday = this.getId (target [2] .slice (1));
if (! this.eyear ||! this.emement ||! this.eday) kembali;
// Nilai rentang
var r = opt.range.indexof (','),
astarts = opt.range.slice (0, r) .split ('-'), // konversi ke: ['2013', '05', '20']
aends = opt.range.slice (r+1, opt.range.length) .split ('-'); // Konversi ke: ['2018', '08', '20']
// Jenis nomor
this.startyear = parseInt (astarts [0], 10);
this.startmonth = parseInt (astarts [1], 10);
this.startday = parseInt (astarts [2], 10);
this.endyear = parseInt (aends [0], 10);
this.endmonth = parseInt (aends [1], 10);
this.endday = parseInt (aends [2], 10);
this.init ();
}
Gysetdate.prototype = {
init: function () {
var _that = ini;
// Tanggal Inisialisasi
this.setyears ({'start': this.startyear, 'end': this.endyear});
this.setMonths ({'start': this.startmonth});
this.setdays ({'tahun': this.startyear, 'month': this.startmonth, 'start': this.startday});
// Pilihan Tahun
this.eyear.onchange = function () {
var tahun = parseInt (this.value);
Switch (true) {
case (tahun == _that.startyear): {
_that.setMonths ({'start': _ that.startmonth});
_that.setdays ({'year': _ that.startyear, 'month': _ that.startmonth, 'start': _ that.startday});
};merusak;
case (tahun == _that.endyear): {
_that.setMonths ({'start': 1, 'end': _ that.endmonth});
if (_that.endmonth> 1) {
_that.setdays ({'tahun': _ that.endyear, 'month': 1, 'start': 1});
}kalau tidak{
_that.setdays ({'tahun': _ that.endyear, 'month': 1, 'start': 1, 'end': _ that.endday});
}
};merusak;
bawaan:{
_that.setMonths ({'start': 1});
_that.setdays ({'start': 1, 'year': year, 'month': 1});
}
}
}
// pilihan bulanan
this.emement.onchange = function () {
var tahun = parseInt (_that.eyear.options [_that.eyear.selectedIndex] .value),
bulan = parseInt (this.value);
Switch (true) {
case (year == _ that.endyear && month == _ that.endmonth): {
_that.setdays ({'start': 1, 'year': year, 'month': month, 'end': _ that.endday});
};merusak;
case (year == _ that.startyear && month == _ that.startmonth): {
_that.setdays ({'year': _ that.startyear, 'month': _ that.startmonth, 'start': _ that.startday});
};merusak;
bawaan:{
_that.setdays ({'start': 1, 'year': year, 'month': month});
}
}
}
},
/*Set tahun, bulan, hari
----------------------------------
Semua nilai parameter adalah tipe angka
*/
// parameter {'start': xx, 'end': xxx}
setYears: function (opt) {
this.eyear.innerhtml = '';
untuk (var n = opt.start; n <= opt.end; n ++) {
this.eyear.add (opsi baru (n, n));
}
},
// parameter {'start': xx, 'end': xxx}
// parameter 'akhir' adalah opsional, abaikan saja, dan dimulai hingga Desember
setMonths: function (opt) {
this.emement.innerhtml = '';
var bulan = opt.end || 12;
untuk (var n = opt.start; n <= bulan; n ++) {
if (n <10) n = '0'+n;
this.emement.add (opsi baru (n, n));
}
},
// parameter {'start': xx, 'tahun': xxx, 'bulan': xx, 'star': xx, 'end': xxx}
// Parameter 'akhir' adalah opsional, abaikan saja, dan dimulai sampai akhir bulan ini (dinilai berdasarkan bulan)
setdays: function (opt) {
this.eday.innerhtml = '';
var days = opt.end || this.getdays (opt.year, opt.month);
untuk (var n = opt.start; n <= hari; n ++) {
if (n <10) n = '0'+n;
this.eday.add (opsi baru (n, n));
}
},
/* Menurut tahun dan bulan, kembalikan jumlah hari yang benar, seperti 2016-2, pengembalian adalah 29 hari (tahun run)
------------------------------------------------------------------
Semua nilai parameter adalah tipe angka
*/
getdays: function (tahun, bulan) {
// var aday = [31,28 | 29,31,30,31,30,31,31,31,30,30,31];
// Pemrosesan Data Hari Februari
var feddays = tahun%4 == 0? 29: 28,
returndays = '';
var bulan = bulan <10? bulan = '0'+bulan: bulan.toString ();
Switch (bulan) {
kasus '01':
kasus '03':
kasus '05':
kasus '07':
kasus '08':
kasus '10':
kasus '12': returndays = 31; break;
kasus '04':
kasus '06':
kasus '09':
Kasus '11': Returndays = 30; break;
kasus '02': returndays = feddays; break;
}
kembali hari kembali;
},
/* Fungsi alat pembantu
----------------------------------
*/
getId: function (id) {
return document.getElementById (id);
}
}
Efek gambar tampilan:
Efeknya cukup bagus. Teman -teman, tolong percantik sendiri dan gunakan dalam proyek Anda sendiri.