uni-datetime-picker 使用start禁用今天之前的时间开始和结束时间相同
uni-datetime-picker 使用start禁用今天之前的时间开始和结束时间相同
| 开发环境 | 版本号 | 项目创建方式 | 
|---|---|---|
| Mac | MACOS 14 | HBuilderX | 
产品分类:uniapp/H5
PC开发环境操作系统:Mac
HBuilderX类型:Alpha
HBuilderX版本号:3.93
浏览器平台:Edge
浏览器版本:版本 117.0.2045.40 (正式版本) (arm64)
示例代码:
<template>  
    <view class="form-container">  
        <uni-forms  
            ref="form"  
            :rules="rules"  
            :model="form"  
            labelPosition="top"  
            :label-width="75"  
            errShowType="toast">  
            <uni-forms-item label="用车时间" name="useTime">  
                <uni-datetime-picker  
                    :border="false"  
                    v-model="form.useTime"  
                    type="datetimerange"  
                    rangeSeparator="至"  
                    hideSecond  
                    :start="new Date().getTime()" />
            </uni-forms-item>
            <view class="flex bg-white padding-left padding-right padding-bottom">
                <u-button class="cu-btn bg-blue flex-sub margin-right" @tap="submit(0)">保存</u-button>
                <u-button class="cu-btn bg-green flex-sub" @tap="submit(1)">提交</u-button>
            </view>
        </uni-forms>
    </view>
</template>
<script>
export default {
    data() {
        return {
            form: {
                id: null,
                useTime: [],
            },
            rules: {
                useTime: {
                    rules: [
                        {
                            required: true,
                            errorMessage: '用车时间不能为空'
                        }
                    ]
                },
            },
            dataOptions: []
        }
    },
    methods: {
        submit(status) {
            this.$refs.form
                .validate()
                .then((res) => {
                    this.$modal.loading()
                    const params = {
                        ...this.form,
                        status,
                        beginTime: this.form.useTime[0],
                        endTime: this.form.useTime[1],
                        presetProcessList
                    }
                    delete params.useTime
                })
                .catch((err) => {
                    console.log('err', err)
                })
        }
    }
}
</script>
<style>
</style>
操作步骤:
开始时间和结束时间都选择当天,在选择开始和结束的时分,点击确定;比如选择10月23号,开始时间选择10-23 14:00,结束时间选择10-23 17:00
预期结果:
展示选择的时间 比如:2023-10-23 14:00 2023-10-23 17:00
实际结果:
展示的是当前的时间,比如:2023-10-23 09:41 2023-10-23 09:41
bug描述:
uni-datetime-picker 使用start禁用今天之前的时间,如果开始和结束时间都选择的当天,无法更改当天的时间,都会展示当前的时间
插件版本:2.2.24
根据 https://github.com/dcloudio/uni-ui/issues/788,修改过源码
// const dateTimeReg = /^\d{4}-(0?[1-9]|1[012])-(0?[1-9]|[12][0-9]|3[01])( [0-5]?[0-9]:[0-5]?[0-9]:[0-5]?[0-9])?$/
const dateTimeReg = /^\d{4}-(0?[1-9]|1[012])-(0?[1-9]|[12][0-9]|3[01])( [0-5]?[0-9]:[0-5]?0-9?)?$/
根据你的描述,这个问题是uni-datetime-picker组件在选择同一天时间范围时出现的bug。以下是解决方案:
- 
问题原因:当开始和结束时间选择同一天时,组件会错误地重置为当前时间。
 - 
解决方法:可以改用
disabledDate属性来禁用今天之前的日期,而不是使用start属性: 
<uni-datetime-picker
    :border="false"
    v-model="form.useTime"
    type="datetimerange"
    rangeSeparator="至"
    hideSecond
    :disabledDate="disabledDate" />
- 在script部分添加disabledDate方法:
 
methods: {
    disabledDate(time) {
        return time < new Date().setHours(0, 0, 0, 0)
    },
    // 其他方法...
}
        
      
                    
                  
                    
