VUE实现禁止选择未来时间的日期选择器

需求

根据考勤时间查找列表项

单位:年、月、日、时、分

代码实现

 html:

 <search-box>
            <div class="page-search">
                <div class="search-item">
                    <span class="search-label">考勤时间:</span>
                    <div>
                        <a-range-picker v-model:value="search.time" show-time format="YYYY-MM-DD HH:mm"
                            valueFormat="YYYY-MM-DD HH:mm"  :disabled-date="disabledDate"
                            :disabled-time="disabledTime" />
                    </div>
                </div>
            </div>
            <template #btn>
                <a-button type="primary" @click="handleSearch">搜索</a-button>
                <a-button class="margin-left-14" @click="handleReset">重置</a-button>
            </template>
        </search-box>

js:

//日期(年月日)
const disabledDate = (current) => {
    return current && current > dayjs().endOf('day');
};

//时间(时分秒)
const disabledTime = (current) => {
    const now = dayjs();
    const currentHour = now.hour();
    const currentMinute = now.minute();

    // 如果当前选择的日期是今天,则禁止选择未来的时间
    if (!current || (current && current.isSame(now, 'day'))) {
        return {
            disabledHours: () => [...Array(24 - currentHour - 1).keys()].map((_, i) => currentHour + 1 + i),
            disabledMinutes: (selectedHour) =>
                selectedHour === currentHour ? [...Array(60 - currentMinute - 1).keys()].map((_, i) => currentMinute + 1 + i) : [],
        }
    }
};

PS. 虽然点开日期选择框,默认选中了当天,但是disabledTime中的current此时为null,故在if判断中要加上!current。

效果

此时是2023-06-13 11:41,似乎分钟没有生效?因为此时我们还没有选择小时,故分钟还未加以限制, 当我们选中当前小时:

 那么先选中59分钟再选择当前时间会导致BUG吗?我们实验一下,发现选中小时后分钟会被限制,如果之前选中的分钟数在未来的话,分钟会被清空,需要重新选择;如果是过去或者正在发生的分钟数则会保持。So,就是这样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Leviash

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值