iview 日期时间选择器动态限制可选范围

4 篇文章 0 订阅
1 篇文章 0 订阅

iview 日期时间选择器动态限制可选范围

业务背景:

默认今天之后的日期不能选,点击某个日期,动态限制可选范围,前30天后30天,如果后30天有部分日期大于今天,同样限制大于今天的不可选:

先上图:

在这里插入图片描述

在这里插入图片描述
不墨迹 上代码!!

	<date-picker type="datetimerange"
	             ref="date"
	             format="yyyy-MM-dd HH:mm:ss"
	             placeholder="选择日期"
	             :options="dateOption"
	             @click.native="nativeClick"  >
	</date-picker>
	data () {
		dateOption: {},
	}
	methods:{
	   nativeClick() {
	     const target = this.$refs['date'].$refs['pickerPanel']
	     const { from, to } = target['rangeState']
	     console.log(from, to)
	     target.handlePickClick = () => {
	       const { from, selecting } = target['rangeState']
	       if (from && selecting) {
	         this.dateOption = {
	           disabledDate(value) {
	             const startTime = new Date(from)
	             const endTime = new Date(from)
	             startTime.setDate(from.getDate() - 30)
	             endTime.setDate(from.getDate() + 30)
	             return !(value >= startTime && value <= endTime) || value && value.valueOf() > Date.now()
	           }
	         }
	       }
	     }
	     if (from && ! to) {
	       this.dateOption = {
	         disabledDate(value) {
	           const startTime = new Date(from)
	           const endTime = new Date(from)
	           startTime.setDate(from.getDate() - 30)
	           endTime.setDate(from.getDate() + 30)
	           return !(value >= startTime && value <= endTime) || value && value.valueOf() > Date.now()
	         }
	       }
	     } else {
	       this.dateOption = {
	         disabledDate(value) {
	           return value && value.valueOf() > Date.now()
	         }
	       }
	     }
	   },
	 }

大功告成!OVER!!!
觉得有帮助的话登陆一下点个赞~谢谢!!!

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
您可以使用 iView 的 `DatePicker` 和 `TimePicker` 组件配合使用来实现日期时间选择器,并且可以通过设置 `disabledDate` 函数来限制开始时间至结束时间。 以下是一个示例代码: ```html <template> <div> <DatePicker v-model="startDate" :disabledDate="disabledStartDate" placeholder="开始时间" /> <TimePicker v-model="startTime" :disabledHours="disabledStartHours" :disabledMinutes="disabledStartMinutes" :disabledSeconds="disabledStartSeconds" placeholder="开始时间" /> <DatePicker v-model="endDate" :disabledDate="disabledEndDate" placeholder="结束时间" /> <TimePicker v-model="endTime" :disabledHours="disabledEndHours" :disabledMinutes="disabledEndMinutes" :disabledSeconds="disabledEndSeconds" placeholder="结束时间" /> </div> </template> <script> export default { data() { return { startDate: null, startTime: null, endDate: null, endTime: null, }; }, methods: { disabledStartDate(date) { if (!this.endDate) { return false; } return date && date.valueOf() > this.endDate.valueOf(); }, disabledEndDate(date) { if (!this.startDate) { return false; } return date && date.valueOf() < this.startDate.valueOf(); }, disabledStartHours() { if (!this.startTime) { return []; } return Array.from({ length: 24 }, (_, i) => i).slice(0, this.endTime.getHours()); }, disabledStartMinutes(h) { if (!this.startTime || h < this.endTime.getHours()) { return []; } return Array.from({ length: 60 }, (_, i) => i).slice(0, this.endTime.getMinutes()); }, disabledStartSeconds(h, m) { if (!this.startTime || h < this.endTime.getHours() || m < this.endTime.getMinutes()) { return []; } return Array.from({ length: 60 }, (_, i) => i).slice(0, this.endTime.getSeconds()); }, disabledEndHours() { if (!this.endTime) { return []; } return Array.from({ length: 24 }, (_, i) => i).slice(this.startTime.getHours() + 1); }, disabledEndMinutes(h) { if (!this.endTime || h > this.startTime.getHours() + 1) { return []; } return Array.from({ length: 60 }, (_, i) => i).slice(this.startTime.getMinutes() + 1); }, disabledEndSeconds(h, m) { if (!this.endTime || h > this.startTime.getHours() + 1 || m > this.startTime.getMinutes() + 1) { return []; } return Array.from({ length: 60 }, (_, i) => i).slice(this.startTime.getSeconds() + 1); }, }, }; </script> ``` 在上面的示例代码中,我们使用了四个数据属性 `startDate`、`startTime`、`endDate` 和 `endTime` 来分别存储用户选择的开始日期时间和结束日期时间。 在 `DatePicker` 和 `TimePicker` 组件上,我们使用 `v-model` 指令将其与数据属性绑定,以实现双向绑定。 在 `DatePicker` 组件上,我们通过设置 `disabledDate` 函数来禁用开始时间晚于结束时间日期。 在 `TimePicker` 组件上,我们通过设置 `disabledHours`、`disabledMinutes` 和 `disabledSeconds` 函数来禁用开始时间晚于结束时间的时、分、秒。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值