element-plus中el-date-picker日期时间组件,实现禁用当前日期以及小时和分钟

  • 需求:element-plus实现日期时间组件禁用当前日期以及小时和分钟,效果如下:

在这里插入图片描述

  • 实现代码
<template>
	<div>
		<el-date-picker
			v-model="testValue"
			type="datetime"
			placeholder="结束时间"
			value-format="YYYY-MM-DD HH:mm"
			format="YYYY-MM-DD HH:mm"
			:disabled-date="disabledDate"
			:disabled-hours="disabledHours"
			:disabled-minutes="disabledMinutes"
			@update:modelValue="handleDateChange"
		/>
	</div>
</template>
<script setup lang="ts">
import { ref } from 'vue';

const testValue = ref('');
const sendTime = ref(new Date());
const selectTimes = ref();

const handleDateChange = (value: any) => {
	if (value && value.split(' ') && value.split(' ').length > 0) {
		// 使用空格作为分隔符,将日期时间字符串拆分成数组
		const parts = value.split(' ');

		// 取数组的第一个元素
		const datePart = parts[0];

		// 将日期部分按照连字符 '-' 拆分成数组
		const dateParts = datePart.split('-');

		// 去除月份和日期中的前导零
		const year = dateParts[0];
		const month = parseInt(dateParts[1], 10); // 使用parseInt去除前导零
		const day = parseInt(dateParts[2], 10); // 使用parseInt去除前导零
		selectTimes.value = year + '-' + month + '-' + day;
	}
};

/**
 * 禁止当前之后的日期
 * @param time 日期
 */
const disabledDate = (time: any) => {
	const now = new Date();
	return time.getTime() > now.getTime();
};

/**
 * 禁止当前日期之后的小时
 * @param selectTimes 下拉选择日期参数
 * @returns 
 */
const disabledHours = () => {
	const now = new Date();
	const hours = now.getHours();
	const disabled = [];
	if (selectTimes.value && selectTimes.value.split('-') && selectTimes.value.split('-').length > 2) {
		if (
			selectTimes.value.split('-')[0] == now.getFullYear() &&
			selectTimes.value.split('-')[1] == now.getMonth() + 1 &&
			selectTimes.value.split('-')[2] == now.getDate()
		) {
			if (sendTime.value.getDate() === now.getDate()) {
				for (let i = hours + 1; i < 24; i++) {
					disabled.push(i);
				}
			}
			return disabled;
		}
	}
};

/**
 * 禁止当前选择的分时之后的分钟
 * @param hour 
 * @returns 
 */
const disabledMinutes = (hour: any) => {
	const now = new Date();
	const minutes = now.getMinutes();
	const disabled = [];
	if (sendTime.value.getDate() === now.getDate() && hour === now.getHours()) {
		for (let i = minutes + 1; i < 60; i++) {
			disabled.push(i);
		}
	}
	return disabled;
};
</script>
<style scoped></style>

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

deku-yzh

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

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

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

打赏作者

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

抵扣说明:

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

余额充值