三分钟教你如何实现el-date-picker动态限制选中日期

这篇具有很好参考价值的文章主要介绍了三分钟教你如何实现el-date-picker动态限制选中日期。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

首先在页面上插入一个el-date-picker组件并绑定一个响应值

这里我们需要day.js这个库来帮助我们处理Date对象,便于日期的计算

<script setup lang="ts">
import { ref } from 'vue'
import dayjs from 'dayjs'; //时间处理

const dateRange = ref([])
</script>

<template>
  <div class="date-picker">
    <el-date-picker
        v-model="dateRange"
        type="daterange"
    />
  </div>
</template>

<style scoped>
.date-picker {
  width: 100vw;
  height: 90vh;
  display: grid;
  place-content: center;
}
</style>

然后我们使用disable-date属性控制哪些日期需要禁用

该属性接受一个函数函数的参数为一个date对象代表组件中每一个可能被选中的日期。

函数的返回值为一个布尔值true代表参数的日期会被禁用,false代表不会被禁用。

<script setup lang="ts">
import { ref } from 'vue'
import dayjs from 'dayjs'; //时间处理

const dateRange = ref([])

const disableRange = (date: Date) => {
  return false
}
</script>

<template>
  <div class="date-picker">
    <el-date-picker
        v-model="dateRange"
        type="daterange"
        :disabled-date="disableRange"
    />
  </div>
</template>

el-date-picker,vue.js,前端,javascript,elementui

返回值为true时的情况

这里我们指定的禁用的范围如下:

  1. 大于当天的日期不可选中
  2. 大于或者小于选中日期31天的日期不可选中

要实现动态限制日期,我们还需要获取在选择日期范围时第一个选中的日期,在element-ui中有pickOption的属性去拿到这个日期,而在element-plus中,pickOption属性被取消了,但有一个事件可以代替它的作用,就是@calendar-change。

该事件接受一个函数,函数的参数为一个含有两个日期对象的数组,选中第一个日期时组件会将该日期对象放在数组首位,选中第二个日期后会按照时间顺序排列两个日期,较前的日期会在数组首位,较后的日期会在次位,选中任一个日期时函数的参数就会发生变化并触发该函数。

因此我们可以定义一个响应值来存储第一次选中的日期,我们可以先输出看看该函数的参数是否如我们刚刚所说:

<script setup lang="ts">
import { ref } from 'vue'
import dayjs from 'dayjs'; //时间处理

const dateRange = ref([])

const disableRange = (date: Date) => {
  return false
}
const selectDate = (date: Array<Date>) => {
  consoloe.log(date)
}
</script>

<template>
  <div class="date-picker">
    <el-date-picker
        v-model="dateRange"
        type="daterange"
        :disabled-date="disableRange"
        @calendar-change="selectDate"
    />
  </div>
</template>

el-date-picker,vue.js,前端,javascript,elementui

这样我们就可以在该函数触发时将数组第一位的值赋值给定义的响应值,获取到第一个选中的日期并存了起来

<script setup lang="ts">
import { ref } from 'vue'
import dayjs from 'dayjs'; //时间处理

const dateRange = ref([])
const selectedValue = ref()

const disableRange = (date: Date) => {
  return false
}
const selectDate = (date: Array<Date>) => {
  selectedValue.value = date[0] //获取到第一个选中的日期
}
</script>

<template>
  <div class="date-picker">
    <el-date-picker
        v-model="dateRange"
        type="daterange"
        :disabled-date="disableRange"
        @calendar-change="selectDate"
    />
  </div>
</template>

然后我们将三个指定的禁用范围的或值作为disable-date的返回值,大于当天的日期我们可以直接将两个Date对象进行比较,大于或者小于选中日期31天的日期我们使用day.js的subtract和add函数简化计算,具体使用方法可以在day.js的官网查看。这里我们用上了刚刚存下来的第一次选中的日期进行比较

<script setup lang="ts">
import { ref } from 'vue'
import dayjs from 'dayjs'; //时间处理

const dateRange = ref([])
const selectedValue = ref()

const disableRange = (date: Date) => {
  return date > new Date() || dayjs(date) < dayjs(selectedValue.value).subtract(31, 'days')
|| dayjs(date) > dayjs(selectedValue.value).add(31, 'days')

}
const selectDate = (date: Array<Date>) => {
  selectedValue.value = date[0] //获取到第一个选中的日期
}
</script>

<template>
  <div class="date-picker">
    <el-date-picker
        v-model="dateRange"
        type="daterange"
        :disabled-date="disableRange"
        @calendar-change="selectDate"
    />
  </div>
</template>

查看效果
el-date-picker,vue.js,前端,javascript,elementui

可以发现还没有选中日期时,前面就有不能选中的日期了,这是因为我们没有处理selectedValue为空值的情况,可以在change事件中添加选中第二个日期后将selectedValue置空的逻辑,然后在disable-date中添加空值判断的逻辑即可

<script setup lang="ts">
import { ref } from 'vue'
import dayjs from 'dayjs'; //时间处理

const dateRange = ref([])
const selectedValue = ref()

const disableRange = (date: Date) => {
  //大于今日日期不可选中
  //大于或者小于选中日期31天不可选中
  if(!selectedValue.value)
    return date>new Date()
  return date>new Date() || dayjs(date)<dayjs(selectedValue.value).subtract(31, 'days')
  || dayjs(date)>dayjs(selectedValue.value).add(31, 'days')
}

const selectDate = (date: Array<Date>) => {
  selectedValue.value = date[0]
}
</script>

<template>
  <div class="date-picker">
    <el-date-picker
        v-model="dateRange"
        type="daterange"
        :disabled-date="disableRange"
        @calendar-change="selectDate"
        @change="selectedValue=null"
    />
  </div>
</template>

<style scoped>
.date-picker {
  width: 100vw;
  height: 90vh;
  display: grid;
  place-content: center;
}
</style>

此时我们看到动态禁用就实现了

el-date-picker,vue.js,前端,javascript,elementui

视频教程在这里el-canlendar动态限制选中日期

欢迎关注B站小南前端の干货分享文章来源地址https://www.toymoban.com/news/detail-776773.html

到了这里,关于三分钟教你如何实现el-date-picker动态限制选中日期的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • el-date-picker自定义选择时间&&el-time-select自定义选择时间实现避免时间冲突

    固定十二个月,当月开始时间默认选择月第一天,结束时间默认选择月最后一天; 月份选择只允许选择当前月份 将当月对应的每天按照时间段划分,段数不做限制。 时间段支持任意位置插入(新增)、删除。 每个时间段具有包含属性,同一时刻不允许在两个时间段中出现包

    2024年02月05日
    浏览(46)
  • vue element ui el-date-picker(日期选择器)实现联动联级选择效果。

    页面上有三个 日期选则器。第一个只能选择月份,第二个是 年月, 第三个是年月日 。 然后第一个选择完毕 第二个、第三个自动带出年 。第二个选择月 第三个自动带出月。  思路: 就是 一个简单的赋值 。第一个 change里 给第二个和第三个赋值 。第二个change里给第三个赋

    2024年02月16日
    浏览(61)
  • <el-date-picker>时间戳单位

    神级操作,搞了半天,秒是大X,毫秒是小x,yue了。 from:参考来源

    2024年01月25日
    浏览(45)
  • el-date-picker:选择日期的限制

    目录 前言: 基本使用: 时间区间: 公司业务:选择一个日期区间,但是只能选择本月 day.js简化版1 day.js简化版2 element-ui作为vue的龙头ui组件库,深受前端开发者的喜爱。 本文着重记录如何使用el-date-picker日期选择器,怎么去限制选择日期。先上官网链接---el-date-picker 先看下

    2024年02月09日
    浏览(40)
  • el-date-picker组件设置时间范围限制

    如图所示,下图为新增的一个弹层页面,同时有个需求, 日期选择 需要 限制一个月的时间范围 (一月 默认为30天 ): 参数 说明 类型 可选值 默认值 shortcuts 设置快捷选项,需要传入 { text, onClick } 对象用法参考 demo 或下表 Object[] — — disabledDate 设置禁用状态,参数为当前

    2024年01月17日
    浏览(47)
  • el-date-picker限制选择的时间范围

     限制选择今天之前的时间,并且只能选择一天                 只能选择今天往后365天

    2024年02月10日
    浏览(48)
  • el-date-picker(日期时间选择)那些事

    用于记录工作和学习中遇到的问题 vue3+element-plus 日期时间格式转换 组件默认的格式:2024-02-01T16:00:00.000Z 需要转换成:YYYY-MM-DD HH:mm:ss

    2024年02月22日
    浏览(44)
  • vue + element实现el-date-picker的时间格式转换,以及自定义时间格式,修改输入的时间格式

    如果只是需要修改传给后端的值或者格式,可以使用 value-format实现,可以在文档上查看详细的介绍 使用自定义指令,首先需要创建一个自定义指令代码的存放位置,我是/utils/directive/dataForm/dataformat.js这个路径创建的内容 自定义指令内容

    2024年02月15日
    浏览(45)
  • element ui 修改el-date-picker样式

     首先查看官方文档,是否提供了类自定义的参数 ,其他组件也是如此 第二种效果图:    

    2024年02月11日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包