123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265 |
- 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,
- }
|