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(':')]
-
- }
- 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,
- }
|