DateTimePicker之禁用当前日期时间之前的数据以及校验函数

1、禁用当前日期时间功能效果

dateTimePicker禁用当前日期时间

2、需要用到的属性

  1. disabledDate: 禁用日期。
  2. disabledTime: 禁用时间。

3、相关代码

fieldProps={{
    disabledDate(date) {
      return date && date < moment().startOf('day');
    },
    disabledTime: (date: any) => disabledTime(date),
  }}
  
  //相关函数-----------------------------
 /**
   * 根据传入参数生成一个数组
   * @param start 数组起始值
   * @param end 数组截止值
   */
  const range = (start: number, end: number) => {
    const result = [];
    for (let i = start; i < end; i++) {
      result.push(i);
    }
    return result;
  };

  /**
   * dateTimePicker的禁用时间设置
   * @param dates 日期组件选中时间
   * @param disabledDate 禁用时间的起点,默认为当前时间
   * @param options { isNeedAddHour: 是否需要加小时,addHourNum:要加多少小时}
   */
  const disabledTime = (
    dates: any,
    disabledDate = new Date(),
    options = {
      isNeedAddHour: false,
      addHourNum: 0,
    },
  ) => {
    let curDate = disabledDate;
    let hours = curDate.getHours() + options.addHourNum;
    let minutes = curDate.getMinutes();
    let seconds = curDate.getSeconds();
    //获取选择的时间
    let selHours = moment(dates).hours();
    let selMinutes = moment(dates).minutes();

    if (dates && moment(dates).date() === moment().date()) {
      //判断选中的是当天
      return {
        disabledHours: () => range(0, hours), // 禁用当前小时之前的小时
        disabledMinutes: () => {
          if (selHours != null && selHours === hours) {
            //判断选中的是当前小时
            return range(0, minutes);
          }
          return [];
        },
        disabledSeconds: () => {
          if (selMinutes != null && selMinutes === minutes) {
            //  判断选中的是当前分钟
            return range(0, seconds);
          }
          return [];
        },
      };
    }
    return {
      disabledHours: () => [],
      disabledMinutes: () => [],
      disabledSeconds: () => [],
    };
  };

4、如果当前表单中有两个DateTimePicker,且后一个要根据前一个进行禁用、校验相关的配置的话

第二个组件的禁用、校验设置可以这么写

//禁用
fieldProps={{
  disabledDate(date) {
    // 没选择计划发车时间,就默认禁用今天之前的时间
    // 选择了就禁用planDate之前的时间
    let selectedPlanData =
      editFormRef.current.getFieldValue('planDate');
    return !!selectedPlanData
      ? date &&
          date < moment(new Date(selectedPlanData)).startOf('day')
      : date && date < moment().startOf('day');
  },
  disabledTime: (date: any) => {
    let selectedPlanData =
      editFormRef.current.getFieldValue('planDate');
    return disabledTime(
      date,
      new Date(!!selectedPlanData ? selectedPlanData : null),
      {
        isNeedAddHour: true,
        addHourNum: 2,
      },
    );
  },
}}
// 校验
rules={[
  {
    validator(rule, value, callback) {
      let selectedPlanDate =
        editFormRef.current.getFieldValue('planDate');
      if (!value) {
        callback('不能为空');
      } else if (moment(value).isBefore(moment())) {
        return callback('时间不能小于当前时间');
      } else if (moment(value).isBefore(moment(selectedPlanDate))) {
        callback('时间不能小于计划发车时间');
      } else if (
        moment(value).isAfter(moment(selectedPlanDate)) &&
        moment(value).isBefore(
          moment(selectedPlanDate).add(2, 'hours'),
        )
      ) {
        callback('至少大于计划发车时间两小时');
      } else {
        callback();
      }
    },
  },
]}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/223220.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【微服务】spring循环依赖深度解析

目录 一、循环依赖概述 1.2 spring中的循环依赖 二、循环依赖问题模拟 2.1 循环依赖代码演示 2.2 问题分析与解决 2.2.1 使用反射中间容器 三、spring循环依赖问题解析 3.1 spring中的依赖注入 3.1.1 field属性注入 3.1.2 setter方法注入 3.1.3 构造器注入 3.2 spri…

Allure生成测试报告这样生成,阿里p10都直呼牛逼

Allure是一个开源的测试报告生成框架&#xff0c;提供了测试报告定制化功能&#xff0c;相较于我们之前使用过pytest-html插件生成的html格式的测试报告&#xff0c;通过Allure生成的报告更加规范、清晰、美观。 pytest框架支持使用Allure生成测试报告&#xff0c;接下来让介绍…

Vue3 Element-Plus 一站式生成动态表单:简化前端开发流程

文章目录 1. 引言2. Vue3 和 Element-Plus 简介2.1 Vue32.2 Element-Plus 3. 动态表单的需求与挑战4. Vue3 和 Element-Plus 动态表单的优势4.1 Vue3的组合式API4.2 Element-Plus的表单组件 5. 一站式生成动态表单的实现5.1 准备工作5.2 创建动态表单组件5.3 使用动态表单组件 …

ELK实现日志收集

1.介绍 ELK是三个开源软件的缩写&#xff0c;分别表示&#xff1a;Elasticsearch , Logstash, Kibana , 它们都是开源软件。 Elasticsearch是个开源分布式搜索引擎&#xff0c;提供搜集、分析、存储数据三大功能。它的特点有&#xff1a;分布式&#xff0c;零配置&#xff0c…

Sprite Editor图片编辑器的使用_unity基础开发教程

Sprite Editor图片编辑器的使用 什么是Sprite Editor安装插件&#xff08;3D项目&#xff09;切片方式Automatic&#xff1a;自动切片Grid By Cell Size&#xff1a;按照像素大小进行切片Grid By Cell Count&#xff1a;按照个数进行切片Isometric Grid&#xff1a;等距网格切片…

Java---线程讲解(一)

文章目录 1. 进程和线程2. 多线程实现方式3. 设置和获取线程名称4. 线程优先级5. 线程控制6. 线程的生命周期 1. 进程和线程 1. 进程&#xff1a;是正在运行的程序&#xff0c;是系统进行资源分配和调用的基本单位。每一个进程都有它自己的内存空间和系统资源。 2. 线程&#x…

7.上传project到服务器及拉取服务器project到本地、更新代码冲突解决

1.上传project到SVN服务器 1.在eclipse中&#xff0c;从show view里调出SVN资源库视图 2.在SVN资源库窗口的空白位置右键选择新建资源库位置 3.填好服务器的地址 4.资源库导入成功,SVN资源库视图下出现导入的资源库 5.新建project 6.写好project的初始版本 7.右键project --&…

如何摆脱你是一个葡萄酒新手的身份?

刚接触葡萄酒的人可能会有一种模糊的感觉&#xff0c;即他们喜欢白葡萄酒、红葡萄酒或玫瑰红葡萄酒&#xff0c;但他们可能不知道如何描述为什么&#xff0c;也不理解必要的术语。 把葡萄酒词汇想象成类似于讨论食物是很有用的&#xff0c;它是甜的、酸的还是辣的&#xff1f;对…

Jmeter接口测试:jmeter导入和导出接口的处理

JMeter测试导入接口 利用Jmeter测试上传文件&#xff0c;首先可根据接口文档或者fiddler抓包分析文件上传的接口&#xff1b;如下图&#xff1a; 以下是我通过fiddler所截取的文件上传的接口 1、填写导入接口的信息 查看文件上传栏下的填写信息&#xff1a; 文件名称&#x…

Elasticsearch,Kibana集成,x-pack鉴权配置

Elasticsearch,Kibana集成 Java8环境部署[CentOS7] cd /usr/local/src wget https://repo.huaweicloud.com/java/jdk/8u201-b09/jdk-8u201-linux-x64.tar.gztar -xzvf jdk-8u201-linux-x64.tar.gz -C /usr/local#配置环境变量 vim /etc/profile #文末添加 export JAVA_HOME/us…

docker安装及简单使用(Linux版本)

文章目录 前言一、docker安装二、docker命令pull&#xff08;安装镜像&#xff09;images&#xff08;查看镜像&#xff09;run&#xff08;创建容器&#xff09;删除容器exec&#xff08;进入运行中的容器&#xff09;常用命令 总结如有启发&#xff0c;可点赞收藏哟~ 前言 ht…

路由跳转添加进度条

根据npm官网的步骤&#xff1a; 1.先安装nprogress npm install nprogress 2.引入nprogress和样式文件 import nprogress from nprogress import nprogress/nprogress.css 3.在前置守卫添加进度条的展示 //全局前置守卫 router.beforeEach((to: any, from: any, next: an…

算法训练 第十周

二、 删除有序数组中的重复项 II 1.双指针 我们在遍历整个数组的时候如果发现某个元素出现的次数超过了两次&#xff0c;就先记录下它出现的第三个位置&#xff0c;然后找到下一个与它不同的元素&#xff0c;从这个元素开始将其和其后面的所有元素都复制到之前记录的位置之后&…

C++ IO库

IO类 IO对象不能拷贝和赋值 iostream 表示形式的变化&#xff1a; 将100转换成二进制序列 然后格式化输出 x,y共用一块内存 输出的时候用不同的方式解析同一块内存 操作 格式化&#xff1a;内部表示转换为相应字节序列 缓存&#xff1a;要输出的内容放到缓存 编码转换&…

python爬虫-某公开数据网站实例小记

注意&#xff01;&#xff01;&#xff01;&#xff01;某XX网站逆向实例仅作为学习案例&#xff0c;禁止其他个人以及团体做谋利用途&#xff01;&#xff01;&#xff01; 第一步&#xff1a;分析页面和请求方式 此网站没有技巧的加密&#xff0c;仅是需要携带cookie和请求…

IntelliJ IDE 插件开发 | (二)UI 界面与数据持久化

系列文章 IntelliJ IDE 插件开发 |&#xff08;一&#xff09;快速入门 前言 在上一篇文章中介绍了在IDEA下开发、运行和安装插件的基本步骤&#xff0c;因此创建项目等基础步骤不再赘述&#xff0c;本文则开始介绍如何进行 UI 界面的开发以及相关数据的持久化存储&#xff…

安全测试工具,自动发现网站所有URL!

作为一个安全测试人员来说&#xff0c;首先要拿到网站所有url&#xff0c;然后根据拿到的url进行渗透测试进行漏洞挖掘。本文给大家介绍的是如何拿到一个网站所有的url。 深度爬取层级控制 现在我也找了很多测试的朋友&#xff0c;做了一个分享技术的交流群&#xff0c;共享了很…

集成开发环境 PyCharm 的安装【侯小啾python基础领航计划 系列(二)】

集成开发环境PyCharm的安装【侯小啾python基础领航计划 系列(二)】 大家好,我是博主侯小啾, 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔…

图灵测试:人工智能的终极挑战

图灵测试&#xff1a;人工智能的终极挑战 一、引言 在人工智能的发展历程中&#xff0c;图灵测试一直被视为一个重要的里程碑。这个由英国计算机科学家艾伦图灵提出的实验&#xff0c;旨在评估人工智能是否能够像人一样思考和表达&#xff0c;为人类与机器智能之间的界限设立了…

Python实现FA萤火虫优化算法优化随机森林分类模型(RandomForestClassifier算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 萤火虫算法&#xff08;Fire-fly algorithm&#xff0c;FA&#xff09;由剑桥大学Yang于2009年提出 , …