uni-datetime-picker 无法直接选择下个月的日期解决方案

我们使用过程中返现,很多客户反应无法选择下个月的时间,什么原因,插件是可以切换下个月的呀!但是你要知道,你知道不代表用户知道。

用户点选8月1日 怎么都没有反应,这时候就会认为软件有问题不用。

我们再看看微信官方自己的时间选择插件,是可以让你选择的。

解决思路:

查看代码发现不能选择的原因是因为阻止了我们选择

if (weeks.disable) return

我们需要可以选择并且自动切换下个月,或上个月,语言组织能力有限直接上代码

choiceDate(weeks)方法中添加如下代码

                console.log(weeks,this.nowDate);
                // 组合选中的fullDate
                var selectedWeeks = weeks;
                var selectedMonth = Number(selectedWeeks.month);
                if (selectedWeeks.fullDate==undefined){
                    switch (selectedWeeks.month) {
                        case 13:
                            selectedMonth = 1;
                            break;
                        case 10:
                        case 11:
                        case 12:
                            break
                        default:
                            if (selectedWeeks.month.length ==3 && typeof selectedWeeks.month === 'string'){
                                selectedMonth = this.sumDigits(selectedMonth)
                            }
                            break
                    }
                    // 使用 split 方法分割日期,然后重新拼接
                    let dateParts = this.nowDate.fullDate.split('-');
                    if (selectedMonth == 1 && dateParts[1]=='12') {
                        dateParts[0] = String(Number(dateParts[0]) + 1); // 年份加1
                    }else if (selectedMonth==12 && dateParts[1]=='01'){
                        dateParts[0] = String(Number(dateParts[0]) - 1); // 年份减1
                    }                                          
                    selectedWeeks.fullDate = dateParts[0] + '-' + String(selectedMonth).padStart(2, '0') + '-' + String(selectedWeeks.date).padStart(2, '0')
                }
                console.log(selectedWeeks);
                const startDateTime = new Date(this.startDate).getTime();
                const endDateTime = new Date(this.endDate).getTime();                
                const nowDateTime = new Date(selectedWeeks.fullDate).getTime();
                const fullDateTime = new Date(weeks.fullDate).getTime();
                if (selectedWeeks.disable && startDateTime && endDateTime && nowDateTime && (nowDateTime < startDateTime || nowDateTime > endDateTime)) {
                    // 提示不可选择
                    uni.showToast({
                        title: '日期['+selectedWeeks.fullDate+']不可选',
                        icon: 'none'
                    })
                    return ;
                }
                console.log(selectedMonth,Number(this.nowDate.month));
                // 选择月份
                if(selectedMonth!=Number(this.nowDate.month)){                   
                    if(selectedMonth>Number(this.nowDate.month)){
                        this.changeMonth('next')
                    }else if(selectedMonth<Number(this.nowDate.month)){
                        this.changeMonth('pre')
                    }
                    
                }                
				// if (weeks.disable) return

自定义了一个 月份转换的方法: sumDigits

            sumDigits(num) {
                // 将数字转换为字符串以便逐个提取每位数字
                const digits = num.toString();
                
                // 初始化总和为0
                let sum = 0;
                
                // 遍历每个字符并将其转换回数字后累加
                for (let i = 0; i < digits.length; i++) {
                    sum += parseInt(digits[i], 10);
                }
                
                return sum;
            },  

能力有限:如果对您有所帮助,我将十分高兴。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值