class BaseInfo { constructor() { this.newDate = new Date(); } withData(param) { return parseInt(param) < 10 ? '0' + param : '' + param; } getLoopArray(start, end) { var start = start || 0; var end = end || 0; var array = []; for (var i = start; i <= end; i++) { array.push(this.withData(i)); } return array; } formatArr(dateString) { return [...dateString.split(' ')[0].split('-'), ...dateString.split(' ')[1].split(':')] //return [...dateString.split(' ')[0].split('-')] } beforeDateArr(disYear) { /* * 处理前 * 获取当前时间 */ let year = this.newDate.getFullYear() - (disYear || 0) let month = this.newDate.getMonth() + 1 let day = this.newDate.getDate() let hour = this.newDate.getHours() let minute = this.newDate.getMinutes() return [year, month, day, hour, minute] } afterDateArr() { /* * 处理后 * 获取当前时间 */ let year = this.withData(this.newDate.getFullYear()) let mont = this.withData(this.newDate.getMonth() + 1) let date = this.withData(this.newDate.getDate()) let hour = this.withData(this.newDate.getHours()) let minu = this.withData(this.newDate.getMinutes()) return [year, mont, date, hour, minu]; } } // 实现 class dateTimePicker extends BaseInfo { constructor(startDate, endDate, defaultDate) { super(); this.dateTimeArray = null this.dateTime = null this.startDate = super.formatArr(startDate); // 开始时间 this.endDate = endDate ? super.formatArr(endDate) : super.afterDateArr(); // 结束时间 this.defaultDate = defaultDate ? super.formatArr(defaultDate) : this.startDate; } setValue(obj) { for (let key in obj) { this[key] = obj[key] } } /* 获取当前切换选择的日期值*/ getCurDateInfo() { return this.dateTime && this.dateTimeArray ? { year: this.dateTimeArray[0][this.dateTime[0]], month: this.dateTimeArray[1][this.dateTime[1]], day: this.dateTimeArray[2][this.dateTime[2]], hour: this.dateTimeArray[3][this.dateTime[3]], second: this.dateTimeArray[4][this.dateTime[4]], } : {} } /* 获取月数组*/ getMonths() { let array = [] const year = (this.getCurDateInfo().year || this.defaultDate[0]).replace(/年/, ''); if (this.startDate[0] == this.endDate[0]) { /* * 开始的年和结束的年相同 * 就取(开始月,结束月) */ array = super.getLoopArray(parseInt(this.startDate[1]), parseInt(this.endDate[1])) } else { switch (year) { case this.startDate[0]: /* 开始年 */ array = super.getLoopArray(parseInt(this.startDate[1]), 12) break; case this.endDate[0]: /* 结束年 */ array = super.getLoopArray(1, parseInt(this.endDate[1])) break; default: array = super.getLoopArray(1, 12) break; } } return array; } /* 获取日数组*/ getDays() { let array = [] let lastDay = null const year = (this.getCurDateInfo().year || this.defaultDate[0]).replace(/年/, ''); const month = (this.getCurDateInfo().month || this.defaultDate[1]).replace(/月/, ''); const flag = year % 400 == 0 || (year % 4 == 0 && year % 100 != 0); switch (month) { case '01': case '03': case '05': case '07': case '08': case '10': case '12': lastDay = 31 break; case '04': case '06': case '09': case '11': lastDay = 30 break; case '02': lastDay = flag ? 29 : 28 break; default: array = '月份格式不正确,请重新输入!' } const afterDateArr = super.afterDateArr() const _start = year == this.startDate[0] && month == this.startDate[1] const _end = year == this.endDate[0] && month == this.endDate[1] if (this.startDate[0] == this.endDate[0] && this.startDate[1] == this.endDate[1]) { /* * 开始的年和结束的年相同,开始月和结束月相同 * 就取(开始日,结束日) */ array = super.getLoopArray(parseInt(this.startDate[2]), parseInt(this.endDate[2])) } else { if (_start) { // 开始年月 array = super.getLoopArray(parseInt(this.startDate[2]), lastDay) } else if (_end) { // 结束年月 array = super.getLoopArray(1, parseInt(this.endDate[2])) } else { array = super.getLoopArray(1, lastDay) } } return array; } /* 获取小时数组*/ getHours() { let array = [] const year = (this.getCurDateInfo().year || this.defaultDate[0]).replace(/年/, ''); const month = (this.getCurDateInfo().month || this.defaultDate[1]).replace(/月/, ''); const day = (this.getCurDateInfo().day || this.defaultDate[2]).replace(/日/, ''); const _start = year == this.startDate[0] && month == this.startDate[1] && day == this.startDate[2] const _end = year == this.endDate[0] && month == this.endDate[1] && day == this.endDate[2] const _equal = this.startDate[0] == this.endDate[0] && this.startDate[1] == this.endDate[1] && this.startDate[ 2] == this.endDate[2] if (_equal) { /* * 开始的年月日和结束的年月日都相同 * 就取(开始小时,结束小时) */ array = super.getLoopArray(parseInt(this.startDate[3]), parseInt(this.endDate[3])) } else { if (_start) { // 开始年月日 array = super.getLoopArray(parseInt(this.startDate[3]), 23) } else if (_end) { // 结尾年月日 array = super.getLoopArray(0, parseInt(this.endDate[3])) } else { array = super.getLoopArray(0, 23) } } return array; } /* 获取分钟数组*/ getMinutes(years, months, days, hours) { let array = [] const year = (this.getCurDateInfo().year || this.defaultDate[0]).replace(/年/, ''); const month = (this.getCurDateInfo().month || this.defaultDate[1]).replace(/月/, ''); const day = (this.getCurDateInfo().day || this.defaultDate[2]).replace(/日/, ''); const hour = (this.getCurDateInfo().hour || this.defaultDate[3]).replace(/时/, ''); const _start = year == this.startDate[0] && month == this.startDate[1] && day == this.startDate[2] && hour == this .startDate[3] const _end = year == this.endDate[0] && month == this.endDate[1] && day == this.endDate[2] && hour == this .endDate[3] const _equal = this.startDate[0] == this.endDate[0] && this.startDate[1] == this.endDate[1] && this.startDate[ 2] == this.endDate[2] && this.startDate[3] == this.endDate[3] if (_equal) { /* * 开始的年月日时和结束的年月日时都相同 * 就取(开始小时,结束小时) */ array = super.getLoopArray(parseInt(this.startDate[4]), parseInt(this.endDate[4])) } else { if (_start) { // 开始年月日 array = super.getLoopArray(parseInt(this.startDate[4]), 59) } else if (_end) { // 结尾年月日 array = super.getLoopArray(0, parseInt(this.endDate[4])) } else { array = super.getLoopArray(0, 59) } } return array; } /* */ dispatch(index) { let arr = [] switch (index) { case 0: arr = super.getLoopArray(this.startDate[0], this.endDate[0]); break; case 1: arr = this.getMonths(); break; case 2: arr = this.getDays(); break; case 3: arr = this.getHours(); break; case 4: arr = this.getMinutes(); break; default: break; } return arr } /* 初始默认数据 */ render() { const dateTime = [] const dateTimeArray = [ [], [], [], [], [] ]; /*年月日 时分秒*/ for (let i = 0; i < dateTimeArray.length; i++) { dateTimeArray[i] = this.dispatch(i) } dateTimeArray.forEach((current, index) => { const _index = current.indexOf(this.defaultDate[index]) dateTime.push(_index == -1 ? 0 : _index); }); return { dateTimeArray, dateTime } } } function newDateTimePicker(startDateTime, endDateTime, pText){ let newDateTimePicker = new dateTimePicker(startDateTime, endDateTime, pText) return newDateTimePicker } module.exports = { newDateTimePicker: newDateTimePicker, }