การตัดสินเดือนเกี่ยวข้องกับเงื่อนไขการตัดสินมากเกินไปหากจะลดประสิทธิภาพอย่างมาก ขอแนะนำให้ใช้ไวยากรณ์สวิตช์
รหัสมีดังนี้:
การคัดลอกรหัสมีดังนี้:
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 ();
สลับ (เดือน) {
กรณี '01':
กรณี '03':
กรณี '05':
กรณี '07':
กรณี '08':
กรณี '10':
กรณี '12': returndays = 31; break;
กรณี '04':
กรณี '06':
กรณี '09':
กรณี '11': returnDays = 30; break;
กรณี '02': returndays = feddays; break;
-
ส่งคืนวันกลับ;
-
ซอร์สโค้ดที่สมบูรณ์:
การคัดลอกรหัสมีดังนี้:
/* ผู้แต่ง: laoguoyong
-
การเชื่อมโยงสามระดับของวันที่การเลือกช่วง
-
พารามิเตอร์
* [สตริง] เป้าหมาย: '#ปี,#เดือน,#วัน'; ID ของปีเดือนวัน
* [สตริง] ช่วง: '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 = opt.targets.split (',');
this.eyear = this.getId (เป้าหมาย [0] .slice (1));
this.emonth = this.getId (เป้าหมาย [1] .slice (1));
this.eday = this.getId (เป้าหมาย [2] .slice (1));
ถ้า (! this.Ear ||! this.emonth ||! this.eday) กลับมา;
// ค่าช่วง
var r = opt.Range.indexof (',')
ASTARTS = opt.Range.SLICE (0, R) .SPLIT ('-'), // แปลงเป็น: ['2013', '05', '20']
aends = 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 (aends [0], 10);
this.endmonth = parseint (aends [1], 10);
this.endday = parseint (aends [2], 10);
this.init ();
-
gysetdate.prototype = {
init: function () {
var _that = this;
// วันที่เริ่มต้น
this.setyears ({'start': this.startyear, 'end': this.endyear});
this.setMonths ({'start': this.startMonth});
this.setDays ({'ปี': this.startyear, 'เดือน': this.startmonth, 'start': this.startday});
// ปีที่เลือก
this.eyear.onchange = function () {
var year = parseint (this.value);
สลับ (จริง) {
กรณี (ปี == _that.startyear): {
_that.setMonths ({'เริ่มต้น': _ That.startMonth});
_that.setDays ({'ปี': _ That.startyear, 'เดือน': _ that.startmonth, 'เริ่มต้น': _ that.startday});
};หยุดพัก;
กรณี (ปี == _that.endyear): {
_that.setMonths ({'เริ่มต้น': 1, 'end': _ that.endmonth});
if (_that.endmonth> 1) {
_that.setDays ({'ปี': _ That.endyear, 'เดือน': 1, 'เริ่มต้น': 1});
}อื่น{
_that.setDays ({'ปี': _ That.endyear, 'เดือน': 1, 'เริ่มต้น': 1, 'สิ้นสุด': _ that.endday});
-
};หยุดพัก;
ค่าเริ่มต้น:{
_that.setMonths ({'เริ่มต้น': 1});
_that.setDays ({'เริ่มต้น': 1, 'ปี': ปี, 'เดือน': 1});
-
-
-
// การเลือกรายเดือน
this.emonth.onchange = function () {
var year = parseint (_that.eyear.options [_that.eyear.electedIndex] .Value)
เดือน = parseint (this.value);
สลับ (จริง) {
กรณี (ปี == _ that.endyear && month == _ That.endMonth): {
_that.setDays ({'เริ่มต้น': 1, 'ปี': ปี, 'เดือน': เดือน, 'สิ้นสุด': _ that.endday});
};หยุดพัก;
กรณี (ปี == _ ที่ StartYear && เดือน == _ That.startMonth): {
_that.setDays ({'ปี': _ That.startyear, 'เดือน': _ that.startmonth, 'เริ่มต้น': _ that.startday});
};หยุดพัก;
ค่าเริ่มต้น:{
_that.setDays ({'เริ่มต้น': 1, 'ปี': ปี, 'เดือน': เดือน});
-
-
-
-
/*กำหนดปีเดือนวัน
-
ค่าพารามิเตอร์ทั้งหมดเป็นประเภทตัวเลข
-
// พารามิเตอร์ {'start': xx, 'end': xxx}
SetYears: ฟังก์ชั่น (opt) {
this.eyear.innerhtml = '';
สำหรับ (var n = opt.start; n <= opt.end; n ++) {
this.eyear.add (ตัวเลือกใหม่ (n, n));
-
-
// พารามิเตอร์ {'start': xx, 'end': xxx}
// พารามิเตอร์ 'สิ้นสุด' เป็นทางเลือกไม่สนใจและจะเริ่มจนถึงเดือนธันวาคม
setMonths: ฟังก์ชั่น (opt) {
this.emonth.innerhtml = '';
var เดือน = opt.end || 12;
สำหรับ (var n = opt.start; n <= เดือน; n ++) {
ถ้า (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);
สำหรับ (var n = opt.start; n <= วัน; n ++) {
ถ้า (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 ();
สลับ (เดือน) {
กรณี '01':
กรณี '03':
กรณี '05':
กรณี '07':
กรณี '08':
กรณี '10':
กรณี '12': returndays = 31; break;
กรณี '04':
กรณี '06':
กรณี '09':
กรณี '11': returnDays = 30; break;
กรณี '02': returndays = feddays; break;
-
ส่งคืนวันกลับ;
-
/* ฟังก์ชั่นผู้ช่วยเครื่องมือ
-
-
getId: function (id) {
ส่งคืน document.getElementById (id);
-
-
รูปภาพแสดงผลเอฟเฟกต์:
เอฟเฟกต์ค่อนข้างดี เพื่อนโปรดตกแต่งด้วยตัวเองและใช้ในโครงการของคุณเอง