const month = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'], day = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31'], getTime = require("../../utils/getTime"); Component({ /** * 组件的属性列表 */ properties: { startDate: { type: String, value: "2022-02-08" }, endDate: { type: String, value: getTime.formatTime(new Date(), '-').split(' ')[0] }, getDate: { type: Function } }, /** * 组件的初始数据 */ data: { value: [9, 3, 3] }, lifetimes: { ready() { let end = this.data.endDate.split('-')[0]; let years = []; //从开始到结束 渲染年数 for (let start = this.data.startDate.split('-')[0] - 0; start <= end; start++) { years.push(start) }; this.setData({ years }); //开始处理 this.handleChange(this.data.startDate) } }, /** * 组件的方法列表 */ methods: { /* 处理日期改变 */ handleChange(date) { let arr = date.split('-'), start = this.data.startDate.split('-'), end = this.data.endDate.split('-'); let m = arr[1] - 0; //选择年==开始年 删除未开始的月 this.setData({ months: (arr[0] == start[0]) ? month.slice(start[1] - 1) : month }) if (arr[0] == start[0]) { //选择年==开始年&&开始年月==选择年月 删除未开始日 this.handleDays(arr[0], m, (m == start[1] - 0) ? start[2] - 0 : 0); } else if (arr[0] == end[0]) { //选择年==结束年 删除多余月 let ms = JSON.parse(JSON.stringify(month)) this.setData({ months: ms.slice(0, end[1] - 0) }) this.handleDays(arr[0], m, 0); } else { //其他年份处理日 this.handleDays(arr[0], m, 0); } }, /* 处理日 */ handleDays(y, m, d) { let arr1 = [1, 3, 5, 7, 8, 10, 12], days = JSON.parse(JSON.stringify(day)), end = this.data.endDate.split('-'); if (m == 2) { //二月份的话判断是否为闰年 days = (y % 4 == 0) ? days.slice(0, 29) : days.slice(0, 28) } else { //其他月份判断有无31日 (arr1.includes(m)) ? '' : days.pop(); }; if (y == end[0] && m == end[1]) { days = days.slice(0, end[2] - 0) } //如果是开始年传递过来 会裁剪掉多余的日 this.setData({ days: (d == 0) ? days : days.slice(d - 1) }); }, pickerChange({ detail }) { let arr = detail.value; this.handleChange(`${this.data.years[arr[0]]}-${this.data.months[arr[1]]}-${this.data.days[arr[2]]}`) this.triggerEvent("getDate", `${this.data.years[arr[0]]}-${this.data.months[arr[1]]}-${this.data.days[arr[2]]}`); }, } })