element日期时间选择器限制时间选择功能实现(精确到小时)

 更新时间:2025年01月21日 10:14:34   作者:小太阳...  
文章介绍了如何使用Element UI的DateTimePicker组件来实现一个时间选择器,该选择器只能选择当前时间之后的7天,并且不能选择当前小时,感兴趣的朋友跟随小编一起看看吧

需求:选一个开始时间,要求精确到小时,小于当前时刻的小时不让选择,只能往后选7天。
如图:

需要element的DateTimePicker 日期时间选择器
部分代码如下:

  <el-form-item
    label="出发时间:"
    prop="startTime">
    <el-date-picker
      v-model="editForm.startTime"
      :picker-options="pickerOptions"// 控制时间选择
      format="yyyy-MM-dd HH:mm"
      type="datetime"
      placeholder="选择日期时间"
    />
  </el-form-item>
    pickerOptions: {
      disabledDate(time) {
        let dateTime = new Date();
        let startDateTime = dateTime.setDate(dateTime.getDate() - 1);
        let endDateTime = dateTime.setDate(dateTime.getDate() + 7);
        return (
          time.getTime() < new Date(startDateTime).getTime() ||
          time.getTime() > new Date(endDateTime).getTime()
        );
      },
      selectableRange:
        new Date(new Date().setHours(new Date().getHours() + 1)).format(
          'hh'
        ) + ':00:00 - 23:59:00'
    },

selectableRange:可选时间段
startDateTime 时间戳
new Date(startDateTime) 标准时间
new Date(startDateTime).getTime() 时间戳

还需要watch监听和computed,如果不监听,那么每一天的当前小时都会被禁用

  computed: {
    startTime() {
      return this.editForm.startTime;
    }
  },
  watch: {
    startTime: function(newVal, oldVal) {
      let selectDate = newVal.format('yyyyMMdd');
      let oldDate = oldVal.format('yyyyMMdd');
      let nowDate = new Date().format('yyyyMMdd');
      // 如果两次选择的时间不相等
      if (oldDate !== selectDate) {
        // 如果这次选择的时间等于今天的时间就不让选当前小时之前,否则就可以选全部时间段
        if (selectDate === nowDate) {
          this.pickerOptions.selectableRange =
            new Date(new Date().setHours(new Date().getHours() + 1)).format(
              'hh'
            ) + ':00:00 - 23:59:00';
        } else {
          this.pickerOptions.selectableRange = '00:00:00 - 23:59:00';
        }
        let realNewVal = new Date(
          newVal.format('yyyy-MM-dd') + oldVal.format(' hh:mm:ss')
        );
        // 如果这个时间比当前时间小,就等于当前时间,否则等于这个参数的时间
        if (realNewVal.getTime() < new Date().getTime()) {
          this.editForm.startTime = new Date();
        } else {
          this.editForm.startTime = realNewVal;
        }
      }
    }
  },

重写了format方法,代码如下:格式化时间也可以用库,比如moment

/**
 * 格式化日期
 */
export const dateFormat = function() {
  /* eslint-disable no-extend-native */
  Date.prototype.format = function(fmt) {
    let o = {
      'M+': this.getMonth() + 1, // 月份
      'd+': this.getDate(), // 日
      'h+': this.getHours(), // 小时
      'm+': this.getMinutes(), // 分
      's+': this.getSeconds(), // 秒
      'q+': Math.floor((this.getMonth() + 3) / 3), // 季度
      S: this.getMilliseconds() // 毫秒
    };
    if (/(y+)/.test(fmt)) {
      fmt = fmt.replace(
        RegExp.$1,
        (this.getFullYear() + '').substr(4 - RegExp.$1.length)
      );
    }
    for (let k in o) {
      if (new RegExp('(' + k + ')').test(fmt)) {
        fmt = fmt.replace(
          RegExp.$1,
          RegExp.$1.length === 1
            ? o[k]
            : ('00' + o[k]).substr(('' + o[k]).length)
        );
      }
    }
    return fmt;
  };
};

注意:Date 对象(Date 对象用于处理日期与时间)
new Date() 中国标准时间

到此这篇关于element日期时间选择器限制时间选择功能实现(精确到小时)的文章就介绍到这了,更多相关element日期时间选择器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vuex数据持久化的两种实现方案

    vuex数据持久化的两种实现方案

    在vuex的时候刷新以后里面存储的state就会被浏览器释放掉,因为我们的state都是存储在内存中的,所以一刷新页面就会把state中的数据重置,这就涉及到vue数据持久化的问题,这篇文章主要给大家介绍了关于vuex数据持久化的两种实现方案,需要的朋友可以参考下
    2021-07-07
  • vite.config.ts配置之自动导入element-puls方式

    vite.config.ts配置之自动导入element-puls方式

    这篇文章主要介绍了vite.config.ts配置之自动导入element-puls方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • vue安装依赖npm install过程中报错npm ERR! cb() never called!问题

    vue安装依赖npm install过程中报错npm ERR! cb() nev

    这篇文章主要介绍了vue安装依赖npm install过程中报错npm ERR! cb() never called!问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • VUE 使用canvas绘制管线管廊示例详解

    VUE 使用canvas绘制管线管廊示例详解

    这篇文章主要为大家介绍了VUE 使用canvas绘制管线/管廊实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • vue一步步实现alert功能

    vue一步步实现alert功能

    本篇文章主要介绍了vue一步步实现alert功能,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • 详解Vue3.0 前的 TypeScript 最佳入门实践

    详解Vue3.0 前的 TypeScript 最佳入门实践

    这篇文章主要介绍了详解Vue3.0 前的 TypeScript 最佳入门实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06
  • Vue.js使用this.$confirm换行显示提示信息实例

    Vue.js使用this.$confirm换行显示提示信息实例

    在编写Web应用时,实现多行文本显示通常需要用到HTML标签或JavaScript特定函数,本文介绍了如何使用JavaScript的$createElement函数来创建多行文本显示,$createElement可以创建任何HTML标签,使得在JavaScript中控制HTML输出更加灵活,通过简单的代码示例
    2024-10-10
  • vue项目部署到nginx/tomcat服务器的实现

    vue项目部署到nginx/tomcat服务器的实现

    这篇文章主要介绍了vue项目部署到nginx/tomcat服务器的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • Vue.js项目中管理每个页面的头部标签的两种方法

    Vue.js项目中管理每个页面的头部标签的两种方法

    这篇文章主要介绍了Vue.js项目中管理每个页面的头部标签的两种方法,需要的朋友可以参考下
    2018-06-06
  • mpvue全局引入sass文件的方法步骤

    mpvue全局引入sass文件的方法步骤

    这篇文章主要介绍了mpvue全局引入sass文件的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03

最新评论