<template> <view class="w-picker-view"> <view style=" display: flex; justify-content: space-around; font-size: 18px; font-weight: 700; padding: 30upx 0; border-bottom: 1rpx solid rgb(134 134 134); border-top: 1rpx solid rgb(134 134 134); color:#1936C9 " > <template v-if="fields == 'minute'"> <view>年份</view> <view>月</view> <view>日</view> <view>时</view> <view>分</view> </template> <template v-if="fields == 'day'"> <view>年份</view> <view>月</view> <view>日</view> </template> </view> <picker-view v-if="fields == 'year'" class="d-picker-view" :indicator-style="itemHeight" :value="pickVal" @change="handlerChange" > <picker-view-column> <view class="w-picker-item" v-for="(item, index) in range.years" :key="index">{{ item }}年</view> </picker-view-column> </picker-view> <picker-view v-if="fields == 'month'" class="d-picker-view" :indicator-style="itemHeight" :value="pickVal" @change="handlerChange" > <picker-view-column> <view class="w-picker-item" v-for="(item, index) in range.years" :key="index">{{ item }}年</view> </picker-view-column> <picker-view-column> <view class="w-picker-item" v-for="(item, index) in range.months" :key="index">{{ item }}月</view> </picker-view-column> </picker-view> <picker-view v-if="fields == 'day'" class="d-picker-view" :indicator-style="itemHeight" :value="pickVal" @change="handlerChange" > <picker-view-column> <view class="w-picker-item" v-for="(item, index) in range.years" :key="index">{{ item }}年</view> </picker-view-column> <picker-view-column> <view class="w-picker-item" v-for="(item, index) in range.months" :key="index">{{ item }}月</view> </picker-view-column> <picker-view-column> <view class="w-picker-item" v-for="(item, index) in range.days" :key="index">{{ item }}日</view> </picker-view-column> </picker-view> <picker-view v-if="fields == 'hour'" class="d-picker-view" :indicator-style="itemHeight" :value="pickVal" @change="handlerChange" > <picker-view-column> <view class="w-picker-item" v-for="(item, index) in range.years" :key="index">{{ item }}年</view> </picker-view-column> <picker-view-column> <view class="w-picker-item" v-for="(item, index) in range.months" :key="index">{{ item }}月</view> </picker-view-column> <picker-view-column> <view class="w-picker-item" v-for="(item, index) in range.days" :key="index">{{ item }}日</view> </picker-view-column> <picker-view-column> <view class="w-picker-item" v-for="(item, index) in range.hours" :key="index">{{ item }}时</view> </picker-view-column> </picker-view> <picker-view v-if="fields == 'minute'" class="d-picker-view" :indicator-style="itemHeight" :value="pickVal" @change="handlerChange" > <picker-view-column> <view class="w-picker-item" v-for="(item, index) in range.years" :key="index">{{ item }}年</view> </picker-view-column> <picker-view-column> <view class="w-picker-item" v-for="(item, index) in range.months" :key="index">{{ item }}月</view> </picker-view-column> <picker-view-column> <view class="w-picker-item" v-for="(item, index) in range.days" :key="index">{{ item }}日</view> </picker-view-column> <picker-view-column> <view class="w-picker-item" v-for="(item, index) in range.hours" :key="index">{{ item }}时</view> </picker-view-column> <picker-view-column> <view class="w-picker-item" v-for="(item, index) in range.minutes" :key="index">{{ item }}分</view> </picker-view-column> </picker-view> <picker-view v-if="fields == 'second'" class="d-picker-view" :indicator-style="itemHeight" :value="pickVal" @change="handlerChange" > <picker-view-column> <view class="w-picker-item" v-for="(item, index) in range.years" :key="index">{{ item }}年</view> </picker-view-column> <picker-view-column> <view class="w-picker-item" v-for="(item, index) in range.months" :key="index">{{ item }}月</view> </picker-view-column> <picker-view-column> <view class="w-picker-item" v-for="(item, index) in range.days" :key="index">{{ item }}日</view> </picker-view-column> <picker-view-column> <view class="w-picker-item" v-for="(item, index) in range.hours" :key="index">{{ item }}时</view> </picker-view-column> <picker-view-column> <view class="w-picker-item" v-for="(item, index) in range.minutes" :key="index">{{ item }}分</view> </picker-view-column> <picker-view-column> <view class="w-picker-item" v-for="(item, index) in range.seconds" :key="index">{{ item }}秒</view> </picker-view-column> </picker-view> </view> </template> <script> export default { data() { return { pickVal: [], range: { years: [], months: [], days: [], hours: [], minutes: [], seconds: [] }, checkObj: {} }; }, props: { itemHeight: { type: String, default: "44px" }, startYear: { type: [String, Number], default: "" }, endYear: { type: [String, Number], default: "" }, value: { type: [String, Array, Number], default: "" }, current: { //是否默认选中当前日期 type: Boolean, default: false }, disabledAfter: { //是否禁用当前之后的日期 type: Boolean, default: false }, fields: { type: String, default: "day" }, // disabledMonth: { // type: Number, // default: 0, // }, // disabledRange: { // type: Array, // default: '' // }, disabledBefore: { //是否禁用当前之前的日期 type: Boolean, default: false } }, watch: { fields(val) { this.initData(); }, value(val) { this.initData(); } }, created() { this.initData(); }, methods: { formatNum(n) { return Number(n) < 10 ? "0" + Number(n) : Number(n) + ""; }, checkValue(value) { let strReg, example; switch (this.fields) { case "year": strReg = /^\d{4}$/; example = "2019"; break; case "month": strReg = /^\d{4}-\d{2}$/; example = "2019-02"; break; case "day": strReg = /^\d{4}-\d{2}-\d{2}$/; example = "2019-02-01"; break; case "hour": strReg = /^\d{4}-\d{2}-\d{2} \d{2}(:\d{2}){1,2}?$/; example = "2019-02-01 18:00:00或2019-02-01 18"; break; case "minute": strReg = /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}(:\d{2}){0,1}?$/; example = "2019-02-01 18:06:00或2019-02-01 18:06"; break; case "second": strReg = /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/; example = "2019-02-01 18:06:01"; break; } if (!strReg.test(value)) { console.log( new Error( "请传入与mode、fields匹配的value值,例value=" + example + "" ) ); } return strReg.test(value); }, resetData(year, month, day, hour, minute) { // let disabledRange = this.disabledRange let curDate = this.getCurrenDate(); let curFlag = this.current; let curYear = curDate.curYear; let curMonth = curDate.curMonth; let curDay = curDate.curDay; let curHour = curDate.curHour; let curMinute = curDate.curMinute; let curSecond = curDate.curSecond; let months = [], days = [], hours = [], minutes = [], seconds = []; let disabledAfter = this.disabledAfter; let disabledBefore = this.disabledBefore; let monthsLen = disabledAfter ? (year * 1 < curYear ? 12 : curMonth) : 12; let totalDays = new Date(year, month, 0).getDate(); //计算当月有几天; let daysLen = disabledAfter ? year * 1 < curYear || month * 1 < curMonth ? totalDays : curDay : totalDays; let hoursLen = disabledAfter ? year * 1 < curYear || month * 1 < curMonth || day * 1 < curDay ? 24 : curHour + 1 : 24; let minutesLen = disabledAfter ? year * 1 < curYear || month * 1 < curMonth || day * 1 < curDay || hour * 1 < curHour ? 60 : curMinute + 1 : 60; let secondsLen = disabledAfter ? year * 1 < curYear || month * 1 < curMonth || day * 1 < curDay || hour * 1 < curHour || minute * 1 < curMinute ? 60 : curSecond + 1 : 60; for (let month = 1; month <= monthsLen; month++) { months.push(this.formatNum(month)); } for (let day = 1; day <= daysLen; day++) { days.push(this.formatNum(day)); } for (let hour = 0; hour < hoursLen; hour++) { hours.push(this.formatNum(hour)); } for (let minute = 0; minute < minutesLen; minute++) { minutes.push(this.formatNum(minute)); } for (let second = 0; second < secondsLen; second++) { seconds.push(this.formatNum(second)); } const index2 = days.findIndex(item => item === this.formatNum(curDay)); const electiveDays = days.slice(index2); const index = months.findIndex(item => item === this.formatNum(curMonth)); const electiveMonths = months.slice(index); // let electiveDays = days.filter(item => !disabledRange.includes(item)) days = this.disabledBefore ? year * 1 === curYear && month * 1 === curMonth ? electiveDays : days : days; months = this.disabledBefore ? year * 1 === curYear ? electiveMonths : months : months; return { months, days, hours, minutes, seconds }; }, isLeapYear(Year) { if ((Year % 4 == 0 && Year % 100 != 0) || Year % 400 == 0) { return true; } else { return false; } }, getData(dVal) { //用来处理初始化数据 let curFlag = this.current; let disabledAfter = this.disabledAfter; let fields = this.fields; let curDate = this.getCurrenDate(); let curYear = curDate.curYear; let curMonthdays = curDate.curMonthdays; let curMonth = curDate.curMonth; let curDay = curDate.curDay; let curHour = curDate.curHour; let curMinute = curDate.curMinute; let curSecond = curDate.curSecond; let defaultDate = this.getDefaultDate(); let startYear = this.getStartDate().getFullYear(); let endYear = this.getEndDate().getFullYear(); //颗粒度,禁用当前之后日期仅对year,month,day,hour生效;分钟秒禁用没有意义, let years = [], months = [], days = [], hours = [], minutes = [], seconds = []; let year = dVal[0] * 1; let month = dVal[1] * 1; let day = dVal[2] * 1; let hour = dVal[3] * 1; let minute = dVal[4] * 1; let monthsLen = disabledAfter ? year < curYear ? 12 : curDate.curMonth : 12; let daysLen = disabledAfter ? year < curYear || month < curMonth ? defaultDate.defaultDays : curDay : curFlag ? curMonthdays : defaultDate.defaultDays; let hoursLen = disabledAfter ? year < curYear || month < curMonth || day < curDay ? 24 : curHour + 1 : 24; let minutesLen = disabledAfter ? year < curYear || month < curMonth || day < curDay || hour < curHour ? 60 : curMinute + 1 : 60; let secondsLen = disabledAfter ? year < curYear || month < curMonth || day < curDay || hour < curHour || minute < curMinute ? 60 : curSecond + 1 : 60; for ( let year = startYear; year <= (disabledAfter ? curYear : endYear); year++ ) { years.push(year.toString()); } for (let month = 1; month <= monthsLen; month++) { months.push(this.formatNum(month)); } for (let day = 1; day <= daysLen; day++) { days.push(this.formatNum(day)); } for (let hour = 0; hour < hoursLen; hour++) { hours.push(this.formatNum(hour)); } for (let minute = 0; minute < minutesLen; minute++) { minutes.push(this.formatNum(minute)); } // for(let second=0;second<(disabledAfter?curDate.curSecond+1:60);second++){ // seconds.push(this.formatNum(second)); // } for (let second = 0; second < 60; second++) { seconds.push(this.formatNum(second)); } const index2 = days.findIndex(item => item === this.formatNum(curDay)); const electiveDays = days.slice(index2); const index = months.findIndex(item => item === this.formatNum(curMonth)); const electiveMonths = months.slice(index); days = this.disabledBefore ? year * 1 === curYear && month * 1 === curMonth ? electiveDays : days : days; months = this.disabledBefore ? year * 1 === curYear ? electiveMonths : months : months; return { years, months, days, hours, minutes, seconds }; }, getCurrenDate() { let curDate = new Date(); let curYear = curDate.getFullYear(); let curMonth = curDate.getMonth() + 1; let curMonthdays = new Date(curYear, curMonth, 0).getDate(); let curDay = curDate.getDate(); let curHour = curDate.getHours(); let curMinute = curDate.getMinutes(); let curSecond = curDate.getSeconds(); return { curDate, curYear, curMonth, curMonthdays, curDay, curHour, curMinute, curSecond }; }, getDefaultDate() { let value = this.value; let reg = /-/g; let defaultDate = value ? new Date(value.replace(reg, "/")) : new Date(); let defaultYear = defaultDate.getFullYear(); let defaultMonth = defaultDate.getMonth() + 1; let defaultDay = defaultDate.getDate(); let defaultDays = new Date(defaultYear, defaultMonth, 0).getDate() * 1; return { defaultDate, defaultYear, defaultMonth, defaultDay, defaultDays }; }, getStartDate() { let start = this.startYear; let startDate = ""; let reg = /-/g; if (start) { startDate = new Date(start + "/01/01"); } else { startDate = new Date("1970/01/01"); } return startDate; }, getEndDate() { let end = this.endYear; let reg = /-/g; let endDate = ""; if (end) { endDate = new Date(end + "/12/01"); } else { endDate = new Date(); } return endDate; }, getDval() { let value = this.value; let fields = this.fields; let dVal = null; let aDate = new Date(); let year = this.formatNum(aDate.getFullYear()); let month = this.formatNum(aDate.getMonth() + 1); let day = this.formatNum(aDate.getDate()); let hour = this.formatNum(aDate.getHours()); let minute = this.formatNum(aDate.getMinutes()); let second = this.formatNum(aDate.getSeconds()); if (value) { let flag = this.checkValue(value); if (!flag) { dVal = [year, month, day, hour, minute, second]; } else { switch (this.fields) { case "year": dVal = value ? [value] : []; break; case "month": dVal = value ? value.split("-") : []; break; case "day": dVal = value ? value.split("-") : []; break; case "hour": dVal = [ ...value.split(" ")[0].split("-"), ...value.split(" ")[1].split(":") ]; break; case "minute": dVal = value ? [ ...value.split(" ")[0].split("-"), ...value.split(" ")[1].split(":") ] : []; break; case "second": dVal = [ ...value.split(" ")[0].split("-"), ...value.split(" ")[1].split(":") ]; break; } } } else { dVal = [year, month, day, hour, minute, second]; } return dVal; }, initData() { let startDate, endDate, startYear, endYear, startMonth, endMonth, startDay, endDay; let years = [], months = [], days = [], hours = [], minutes = [], seconds = []; let dVal = [], pickVal = []; let value = this.value; let reg = /-/g; let range = {}; let result = "", full = "", year, month, day, hour, minute, second, obj = {}; let defaultDate = this.getDefaultDate(); let defaultYear = defaultDate.defaultYear; let defaultMonth = defaultDate.defaultMonth; let defaultDay = defaultDate.defaultDay; let defaultDays = defaultDate.defaultDays; let curFlag = this.current; let disabledAfter = this.disabledAfter; let curDate = this.getCurrenDate(); let curYear = curDate.curYear; let curMonth = curDate.curMonth; let curMonthdays = curDate.curMonthdays; let curDay = curDate.curDay; let curHour = curDate.curHour; let curMinute = curDate.curMinute; let curSecond = curDate.curSecond; let dateData = []; dVal = this.getDval(); startDate = this.getStartDate(); endDate = this.getEndDate(); startYear = startDate.getFullYear(); startMonth = startDate.getMonth(); startDay = startDate.getDate(); endYear = endDate.getFullYear(); endMonth = endDate.getMonth(); endDay = endDate.getDate(); dateData = this.getData(dVal); years = dateData.years; months = dateData.months; days = dateData.days; hours = dateData.hours; minutes = dateData.minutes; seconds = dateData.seconds; switch (this.fields) { case "year": pickVal = disabledAfter ? [ dVal[0] && years.indexOf(dVal[0]) != -1 ? years.indexOf(dVal[0]) : 0 ] : curFlag ? [years.indexOf(curYear + "")] : [ dVal[0] && years.indexOf(dVal[0]) != -1 ? years.indexOf(dVal[0]) : 0 ]; range = { years }; year = dVal[0] ? dVal[0] : years[0]; result = full = `${year}`; obj = { year }; break; case "month": pickVal = disabledAfter ? [ dVal[0] && years.indexOf(dVal[0]) != -1 ? years.indexOf(dVal[0]) : 0, dVal[1] && months.indexOf(dVal[1]) != -1 ? months.indexOf(dVal[1]) : 0 ] : curFlag ? [ years.indexOf(curYear + ""), months.indexOf(this.formatNum(curMonth)) ] : [ dVal[0] && years.indexOf(dVal[0]) != -1 ? years.indexOf(dVal[0]) : 0, dVal[1] && months.indexOf(dVal[1]) != -1 ? months.indexOf(dVal[1]) : 0 ]; range = { years, months }; year = dVal[0] ? dVal[0] : years[0]; month = dVal[1] ? dVal[1] : months[0]; result = full = `${year + "-" + month}`; obj = { year, month }; break; case "day": pickVal = disabledAfter ? [ dVal[0] && years.indexOf(dVal[0]) != -1 ? years.indexOf(dVal[0]) : 0, dVal[1] && months.indexOf(dVal[1]) != -1 ? months.indexOf(dVal[1]) : 0, dVal[2] && days.indexOf(dVal[2]) != -1 ? days.indexOf(dVal[2]) : 0 ] : curFlag ? [ years.indexOf(curYear + ""), months.indexOf(this.formatNum(curMonth)), days.indexOf(this.formatNum(curDay)) ] : [ dVal[0] && years.indexOf(dVal[0]) != -1 ? years.indexOf(dVal[0]) : 0, dVal[1] && months.indexOf(dVal[1]) != -1 ? months.indexOf(dVal[1]) : 0, dVal[2] && days.indexOf(dVal[2]) != -1 ? days.indexOf(dVal[2]) : 0 ]; range = { years, months, days }; year = dVal[0] ? dVal[0] : years[0]; month = dVal[1] ? dVal[1] : months[0]; day = dVal[2] ? dVal[2] : days[0]; result = full = `${year + "-" + month + "-" + day}`; obj = { year, month, day }; break; case "hour": pickVal = disabledAfter ? [ dVal[0] && years.indexOf(dVal[0]) != -1 ? years.indexOf(dVal[0]) : 0, dVal[1] && months.indexOf(dVal[1]) != -1 ? months.indexOf(dVal[1]) : 0, dVal[2] && days.indexOf(dVal[2]) != -1 ? days.indexOf(dVal[2]) : 0, dVal[3] && hours.indexOf(dVal[3]) != -1 ? hours.indexOf(dVal[3]) : 0 ] : curFlag ? [ years.indexOf(curYear + ""), months.indexOf(this.formatNum(curMonth)), days.indexOf(this.formatNum(curDay)), hours.indexOf(this.formatNum(curHour)) ] : [ dVal[0] && years.indexOf(dVal[0]) != -1 ? years.indexOf(dVal[0]) : 0, dVal[1] && months.indexOf(dVal[1]) != -1 ? months.indexOf(dVal[1]) : 0, dVal[2] && days.indexOf(dVal[2]) != -1 ? days.indexOf(dVal[2]) : 0, dVal[3] && hours.indexOf(dVal[3]) != -1 ? hours.indexOf(dVal[3]) : 0 ]; range = { years, months, days, hours }; year = dVal[0] ? dVal[0] : years[0]; month = dVal[1] ? dVal[1] : months[0]; day = dVal[2] ? dVal[2] : days[0]; hour = dVal[3] ? dVal[3] : hours[0]; result = `${year + "-" + month + "-" + day + " " + hour}`; full = `${year + "-" + month + "-" + day + " " + hour + ":00:00"}`; obj = { year, month, day, hour }; break; case "minute": pickVal = disabledAfter ? [ dVal[0] && years.indexOf(dVal[0]) != -1 ? years.indexOf(dVal[0]) : 0, dVal[1] && months.indexOf(dVal[1]) != -1 ? months.indexOf(dVal[1]) : 0, dVal[2] && days.indexOf(dVal[2]) != -1 ? days.indexOf(dVal[2]) : 0, dVal[3] && hours.indexOf(dVal[3]) != -1 ? hours.indexOf(dVal[3]) : 0, dVal[4] && minutes.indexOf(dVal[4]) != -1 ? minutes.indexOf(dVal[4]) : 0 ] : curFlag ? [ years.indexOf(curYear + ""), months.indexOf(this.formatNum(curMonth)), days.indexOf(this.formatNum(curDay)), hours.indexOf(this.formatNum(curHour)), minutes.indexOf(this.formatNum(curMinute)) ] : [ dVal[0] && years.indexOf(dVal[0]) != -1 ? years.indexOf(dVal[0]) : 0, dVal[1] && months.indexOf(dVal[1]) != -1 ? months.indexOf(dVal[1]) : 0, dVal[2] && days.indexOf(dVal[2]) != -1 ? days.indexOf(dVal[2]) : 0, dVal[3] && hours.indexOf(dVal[3]) != -1 ? hours.indexOf(dVal[3]) : 0, dVal[4] && minutes.indexOf(dVal[4]) != -1 ? minutes.indexOf(dVal[4]) : 0 ]; range = { years, months, days, hours, minutes }; year = dVal[0] ? dVal[0] : years[0]; month = dVal[1] ? dVal[1] : months[0]; day = dVal[2] ? dVal[2] : days[0]; hour = dVal[3] ? dVal[3] : hours[0]; minute = dVal[4] ? dVal[4] : minutes[0]; full = `${year + "-" + month + "-" + day + " " + hour + ":" + minute + ":00"}`; result = `${year + "-" + month + "-" + day + " " + hour + ":" + minute}`; obj = { year, month, day, hour, minute }; break; case "second": pickVal = disabledAfter ? [ dVal[0] && years.indexOf(dVal[0]) != -1 ? years.indexOf(dVal[0]) : 0, dVal[1] && months.indexOf(dVal[1]) != -1 ? months.indexOf(dVal[1]) : 0, dVal[2] && days.indexOf(dVal[2]) != -1 ? days.indexOf(dVal[2]) : 0, dVal[3] && hours.indexOf(dVal[3]) != -1 ? hours.indexOf(dVal[3]) : 0, dVal[4] && minutes.indexOf(dVal[4]) != -1 ? minutes.indexOf(dVal[4]) : 0, dVal[5] && seconds.indexOf(dVal[5]) != -1 ? seconds.indexOf(dVal[5]) : 0 ] : curFlag ? [ years.indexOf(curYear + ""), months.indexOf(this.formatNum(curMonth)), days.indexOf(this.formatNum(curDay)), hours.indexOf(this.formatNum(curHour)), minutes.indexOf(this.formatNum(curMinute)), seconds.indexOf(this.formatNum(curSecond)) ] : [ dVal[0] && years.indexOf(dVal[0]) != -1 ? years.indexOf(dVal[0]) : 0, dVal[1] && months.indexOf(dVal[1]) != -1 ? months.indexOf(dVal[1]) : 0, dVal[2] && days.indexOf(dVal[2]) != -1 ? days.indexOf(dVal[2]) : 0, dVal[3] && hours.indexOf(dVal[3]) != -1 ? hours.indexOf(dVal[3]) : 0, dVal[4] && minutes.indexOf(dVal[4]) != -1 ? minutes.indexOf(dVal[4]) : 0, dVal[5] && seconds.indexOf(dVal[5]) != -1 ? seconds.indexOf(dVal[5]) : 0 ]; range = { years, months, days, hours, minutes, seconds }; year = dVal[0] ? dVal[0] : years[0]; month = dVal[1] ? dVal[1] : months[0]; day = dVal[2] ? dVal[2] : days[0]; hour = dVal[3] ? dVal[3] : hours[0]; minute = dVal[4] ? dVal[4] : minutes[0]; second = dVal[5] ? dVal[5] : seconds[0]; result = full = `${year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second}`; obj = { year, month, day, hour, minute, second }; break; default: range = { years, months, days }; break; } this.range = range; this.checkObj = obj; this.$emit("change", { result: result, value: full, obj: obj }); this.$nextTick(() => { this.pickVal = pickVal; }); }, handlerChange(e) { let arr = [...e.detail.value]; let data = this.range; let year = "", month = "", day = "", hour = "", minute = "", second = ""; let result = "", full = "", obj = {}; let months = null, days = null, hours = null, minutes = null, seconds = null; let disabledAfter = this.disabledAfter; let leapYear = false, resetData = {}; year = arr[0] || arr[0] == 0 ? data.years[arr[0]] || data.years[data.years.length - 1] : ""; month = arr[1] || arr[1] == 0 ? data.months[arr[1]] || data.months[data.months.length - 1] : ""; day = arr[2] || arr[2] == 0 ? data.days[arr[2]] || data.days[data.days.length - 1] : ""; hour = arr[3] || arr[3] == 0 ? data.hours[arr[3]] || data.hours[data.hours.length - 1] : ""; minute = arr[4] || arr[4] == 0 ? data.minutes[arr[4]] || data.minutes[data.minutes.length - 1] : ""; second = arr[5] || arr[5] == 0 ? data.seconds[arr[5]] || data.seconds[data.seconds.length - 1] : ""; resetData = this.resetData(year, month, day, hour, minute); //重新拉取当前日期数据; month = arr[1] || arr[1] == 0 ? resetData.months[arr[1]] || resetData.months[resetData.months.length - 1] : ""; day = arr[2] || arr[2] == 0 ? resetData.days[arr[2]] || resetData.days[resetData.days.length - 1] : ""; resetData = this.resetData(year, month, day, hour, minute); //重新拉取当前日期数据; month = arr[1] || arr[1] == 0 ? resetData.months[arr[1]] || resetData.months[resetData.months.length - 1] : ""; day = arr[2] || arr[2] == 0 ? resetData.days[arr[2]] || resetData.days[resetData.days.length - 1] : ""; resetData = this.resetData(year, month, day, hour, minute); //重新拉取当前日期数据; leapYear = this.isLeapYear(year); //判断是否为闰年; switch (this.fields) { case "year": result = full = `${year}`; obj = { year }; break; case "month": result = full = `${year + "-" + month}`; if (this.disabledAfter) months = resetData.months; if (this.disabledBefore) months = resetData.months; if (months) this.range.months = months; obj = { year, month }; break; case "day": result = full = `${year + "-" + month + "-" + day}`; if (this.disabledAfter) { months = resetData.months; days = resetData.days; } else if (this.disabledBefore) { months = resetData.months; days = resetData.days; } else { if (leapYear || month != this.checkObj.month || month == 2) { days = resetData.days; } } if (months) this.range.months = months; if (days) this.range.days = days; obj = { year, month, day }; break; case "hour": result = `${year + "-" + month + "-" + day + " " + hour}`; full = `${year + "-" + month + "-" + day + " " + hour + ":00:00"}`; if (this.disabledAfter) { months = resetData.months; days = resetData.days; hours = resetData.hours; } else if (this.disabledBefore) { months = resetData.months; days = resetData.days; hours = resetData.hours; } else { if (leapYear || month != this.checkObj.month || month == 2) { days = resetData.days; } } if (months) this.range.months = months; if (days) this.range.days = days; if (hours) this.range.hours = hours; obj = { year, month, day, hour }; break; case "minute": full = `${year + "-" + month + "-" + day + " " + hour + ":" + minute + ":00"}`; result = `${year + "-" + month + "-" + day + " " + hour + ":" + minute}`; if (this.disabledAfter) { months = resetData.months; days = resetData.days; hours = resetData.hours; minutes = resetData.minutes; } else if (this.disabledBefore) { months = resetData.months; days = resetData.days; hours = resetData.hours; minutes = resetData.minutes; } else { if (leapYear || month != this.checkObj.month || month == 2) { days = resetData.days; } } if (months) this.range.months = months; if (days) this.range.days = days; if (hours) this.range.hours = hours; if (minutes) this.range.minutes = minutes; obj = { year, month, day, hour, minute }; break; case "second": result = full = `${year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second}`; if (this.disabledAfter) { months = resetData.months; days = resetData.days; hours = resetData.hours; minutes = resetData.minutes; //seconds=resetData.seconds; } else { if (leapYear || month != this.checkObj.month || month == 2) { days = resetData.days; } } if (months) this.range.months = months; if (days) this.range.days = days; if (hours) this.range.hours = hours; if (minutes) this.range.minutes = minutes; //if(seconds)this.range.seconds=seconds; obj = { year, month, day, hour, minute, second }; break; } this.checkObj = obj; this.$emit("change", { result: result, value: full, obj: obj }); } } }; </script> <style lang="scss"> @import "./w-picker.css"; </style>