首页 > 其他分享 >各时间段的交错

各时间段的交错

时间:2024-04-02 17:03:07浏览次数:17  
标签:dates isDateRangeOverlap MM DD dateStrings YYYY 时间段 交错

需求就是一个项目的进行有启动阶段,需求阶段,设计阶段,研发阶段,实施阶段,上线阶段,试运行阶段,质保阶段,这些阶段的时间是不能有重合的,这里以react为例

实现如下:
html部分

<ul style={{ fontSize: '16px' }} className='fixed_card'>

                  <li style={{ display: 'flex', alignItems: 'center' }}>
                    <span style={{ width: '8%', display: 'block' }}>启动阶段:</span>
                    <DatePicker.RangePicker
                      style={{ width: '20%', marginBottom: '10px' }}
                      value={
                        startNodeStart && startNodeEnd
                          ? [moment(startNodeStart, 'YYYY-MM-DD'), moment(startNodeEnd, 'YYYY-MM-DD')]
                          : null
                      }
                      onChange={(dates, dateStrings) =>
                        this.handleDateChange(dates, dateStrings, 'startNode', '启动阶段')
                      }
                      placeholder={['开始时间', '结束时间']}
                      format="YYYY-MM-DD"
                      disabled={!startStatus}
                    />
                  </li>
                  <li style={{ display: 'flex', alignItems: 'center' }}>
                    <span style={{ width: '8%', display: 'block' }}>需求阶段:</span>
                    <DatePicker.RangePicker
                      style={{ width: '20%', marginBottom: '10px' }}
                      placeholder={['开始时间', '结束时间']}
                      value={
                        demandNodeStart && demandNodeEnd
                          ? [moment(demandNodeStart, 'YYYY-MM-DD'), moment(demandNodeEnd, 'YYYY-MM-DD')]
                          : null
                      }

                      onChange={(dates, dateStrings) =>
                        this.handleDateChange(dates, dateStrings, 'demandNode', '需求阶段')
                      }
                      format="YYYY-MM-DD"
                      disabled={!demandStatus}

                    />
                  </li>
                  <li style={{ display: 'flex', alignItems: 'center' }}>
                    <span style={{ width: '8%', display: 'block' }}>设计阶段:</span>
                    <DatePicker.RangePicker
                      style={{ width: '20%', marginBottom: '10px' }}
                      placeholder={['开始时间', '结束时间']}
                      value={
                        designNodeStart && designNodeEnd
                          ? [moment(designNodeStart, 'YYYY-MM-DD'), moment(designNodeEnd, 'YYYY-MM-DD')]
                          : null
                      }
                      onChange={(dates, dateStrings) =>
                        this.handleDateChange(dates, dateStrings, 'designNode', '设计阶段')
                      }
                      format="YYYY-MM-DD"
                      disabled={!designStatus}

                    />
                  </li>
                  <li style={{ display: 'flex', alignItems: 'center' }}>
                    <span style={{ width: '8%', display: 'block' }}>研发阶段:</span>
                    <DatePicker.RangePicker
                      style={{ width: '20%', marginBottom: '10px' }}
                      placeholder={['开始时间', '结束时间']}
                      value={
                        developmentNodeStart && developmentNodeEnd
                          ? [moment(developmentNodeStart, 'YYYY-MM-DD'), moment(developmentNodeEnd, 'YYYY-MM-DD')]
                          : null
                      }
                      onChange={(dates, dateStrings) =>
                        this.handleDateChange(dates, dateStrings, 'developmentNode', '研发阶段')
                      }
                      format="YYYY-MM-DD"
                      disabled={!developmentStatus}

                    />
                  </li>
                  <li style={{ display: 'flex', alignItems: 'center' }}>
                    <span style={{ width: '8%', display: 'block' }}>实施阶段:</span>
                    <DatePicker.RangePicker
                      style={{ width: '20%', marginBottom: '10px' }}
                      placeholder={['开始时间', '结束时间']}
                      value={
                        implementationNodeStart && implementationNodeEnd
                          ? [moment(implementationNodeStart, 'YYYY-MM-DD'), moment(implementationNodeEnd, 'YYYY-MM-DD')]
                          : null
                      }
                      onChange={(dates, dateStrings) =>
                        this.handleDateChange(dates, dateStrings, 'implementationNode', '实施阶段')
                      }
                      format="YYYY-MM-DD"
                      disabled={!implementationStatus}

                    />
                  </li>
                  <li style={{ display: 'flex', alignItems: 'center' }}>
                    <span style={{ width: '8%', display: 'block' }}>上线阶段:</span>
                    <DatePicker.RangePicker
                      style={{ width: '20%', marginBottom: '10px' }}
                      placeholder={['开始时间', '结束时间']}
                      value={
                        launchNodeStart && launchNodeEnd
                          ? [moment(launchNodeStart, 'YYYY-MM-DD'), moment(launchNodeEnd, 'YYYY-MM-DD')]
                          : null
                      }
                      onChange={(dates, dateStrings) =>
                        this.handleDateChange(dates, dateStrings, 'launchNode', '上线阶段')
                      }
                      format="YYYY-MM-DD"
                      disabled={!launchStatus}

                    />
                  </li>
                  <li style={{ display: 'flex', alignItems: 'center' }}>
                    <span style={{ width: '8%', display: 'block' }}>试运行阶段:</span>
                    <DatePicker.RangePicker
                      style={{ width: '20%', marginBottom: '10px' }}
                      placeholder={['开始时间', '结束时间']}
                      value={
                        trialOperationStart && trialOperationEnd
                          ? [moment(trialOperationStart, 'YYYY-MM-DD'), moment(trialOperationEnd, 'YYYY-MM-DD')]
                          : null
                      }
                      onChange={(dates, dateStrings) =>
                        this.handleDateChange(dates, dateStrings, 'trialOperation', '试运行阶段')
                      }
                      format="YYYY-MM-DD"
                      disabled={!trialOperationStatus}

                    />
                  </li>
                  <li style={{ display: 'flex', alignItems: 'center' }}>
                    <span style={{ width: '8%', display: 'block' }}>质保阶段:</span>
                    <DatePicker.RangePicker
                      style={{ width: '20%', marginBottom: '10px' }}
                      placeholder={['开始时间', '结束时间']}
                      value={
                        warrantyOperationStart && warrantyOperationEnd
                          ? [moment(warrantyOperationStart, 'YYYY-MM-DD'), moment(warrantyOperationEnd, 'YYYY-MM-DD')]
                          : null
                      }
                      onChange={(dates, dateStrings) =>
                        this.handleDateChange(dates, dateStrings, 'warrantyOperation', '质保阶段')
                      }
                      format="YYYY-MM-DD"
                      disabled={!trialOperationStatus}

                    />
                  </li>
                </ul>

js代码

handleDateChange = (dates, dateStrings, stateKey, skname) => {
    const { startNodeStart, startNodeEnd, demandNodeStart, demandNodeEnd, designNodeStart, designNodeEnd, developmentNodeStart, developmentNodeEnd, implementationNodeStart, implementationNodeEnd, launchNodeStart, launchNodeEnd, trialOperationStart, trialOperationEnd, warrantyOperationStart, warrantyOperationEnd } = this.state;
    if(
      (stateKey === 'startNode' && (this.isDateRangeOverlap(dateStrings[0], dateStrings[1], demandNodeStart, demandNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], designNodeStart, designNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], developmentNodeStart, developmentNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], implementationNodeStart, implementationNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], launchNodeStart, launchNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], trialOperationStart, trialOperationEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], warrantyOperationStart, warrantyOperationEnd))) ||
      (stateKey === 'demandNode' && (this.isDateRangeOverlap(dateStrings[0], dateStrings[1], startNodeStart, startNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], designNodeStart, designNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], developmentNodeStart, developmentNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], implementationNodeStart, implementationNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], launchNodeStart, launchNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], trialOperationStart, trialOperationEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], warrantyOperationStart, warrantyOperationEnd))) ||
      (stateKey === 'designNode' && (this.isDateRangeOverlap(dateStrings[0], dateStrings[1], startNodeStart, startNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], demandNodeStart, demandNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], developmentNodeStart, developmentNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], implementationNodeStart, implementationNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], launchNodeStart, launchNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], trialOperationStart, trialOperationEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], warrantyOperationStart, warrantyOperationEnd))) ||
      (stateKey === 'developmentNode' && (this.isDateRangeOverlap(dateStrings[0], dateStrings[1], startNodeStart, startNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], demandNodeStart, demandNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], designNodeStart, designNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], implementationNodeStart, implementationNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], launchNodeStart, launchNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], trialOperationStart, trialOperationEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], warrantyOperationStart, warrantyOperationEnd))) ||
      (stateKey === 'implementationNode' && (this.isDateRangeOverlap(dateStrings[0], dateStrings[1], startNodeStart, startNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], demandNodeStart, demandNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], designNodeStart, designNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], developmentNodeStart, developmentNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], launchNodeStart, launchNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], trialOperationStart, trialOperationEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], warrantyOperationStart, warrantyOperationEnd))) ||
      (stateKey === 'launchNode' && (this.isDateRangeOverlap(dateStrings[0], dateStrings[1], startNodeStart, startNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], demandNodeStart, demandNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], designNodeStart, designNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], developmentNodeStart, developmentNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], implementationNodeStart, implementationNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], trialOperationStart, trialOperationEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], warrantyOperationStart, warrantyOperationEnd))) ||
      (stateKey === 'trialOperation' && (this.isDateRangeOverlap(dateStrings[0], dateStrings[1], startNodeStart, startNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], demandNodeStart, demandNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], designNodeStart, designNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], developmentNodeStart, developmentNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], implementationNodeStart, implementationNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], launchNodeStart, launchNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], warrantyOperationStart, warrantyOperationEnd))) ||
      (stateKey === 'warrantyOperation' && (this.isDateRangeOverlap(dateStrings[0], dateStrings[1], startNodeStart, startNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], demandNodeStart, demandNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], designNodeStart, designNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], developmentNodeStart, developmentNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], implementationNodeStart, implementationNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], launchNodeStart, launchNodeEnd) || this.isDateRangeOverlap(dateStrings[0], dateStrings[1], trialOperationStart, trialOperationEnd)))
    ) {
      // 时间交叉,给出提示或者处理逻辑
      message.error(`时间与${skname}阶段存在交叉`);
    } else {
      // 时间不交叉,更新state并处理其他逻辑
      this.setState({
        [stateKey + 'Start']: dateStrings[0],
        [stateKey + 'End']: dateStrings[1],
      }, () => {
        this.handleButtonClick('实施情况');
      });
    }
  };

标签:dates,isDateRangeOverlap,MM,DD,dateStrings,YYYY,时间段,交错
From: https://blog.csdn.net/qq_42549017/article/details/136815940

相关文章

  • 基于51单片机的报警器【红外入侵,时间段】(仿真)
    红外入侵报警系统1.实现红外入侵检测(I0口高低电平模拟)的报警;2.数码管显示分、秒3.按键设置报警开启时段,时段内触发报警时,发出蜂鸣器响起,LED灯闪烁#include"DHT11.h"unsignedchardht11_dat1[5];//湿度高低+温度高低+和校验unsignedchardht11_dat2[5];voidd......
  • 习题2-4 求交错序列前N项和
    本题要求编写程序,计算交错序列1-2/3+3/5-4/7+5/9-6/11+...的前N项之和。输入格式:输入在一行中给出一个正整数N。输出格式:在一行中输出部分和的值,结果保留三位小数。输入样例:5输出样例:0.917#include<stdio.h>#include<math.h>intmain(){ intn; scanf(......
  • 【题解】A18536.星光交错的律动
    题目跳转思路:这道题可能跟博弈论有一点关系,没有学习过博弈论做起来应该问题也不大。思考一个问题,先手必胜的前提是什么?有关更多的内容可以前往:浅谈有向无环图先手必胜的前提是,在任何一种局面下,先手都有至少一种操作可以使后手处于必败的局面。若先手进行任何操作后,后手都可以......
  • mysql查询几天之前,或某个时间段之间的每天记录数量,不存在补全0
    直接看SQL(非常简单,通俗易懂)biz_requirement_order:业务表名create_time:业务表时间字段,依据这个字段统计数量num:数量返回值别名,可以随意改t表:查询所有符合条件的日期a表:业务表中根据日期分组,查询每天的记录数量最后使用左连接查询,将两个集合合并返回最终结果查询几天之前......
  • 安防视频监控云平台EasyCVR v3.5支持批量设置录像计划时间段
    安防视频监控云平台EasyCVR支持多协议接入、可分发多格式的视频流,平台支持高清视频的接入、管理、共享,支持7*24小时不间断监控。视频监控管理平台EasyCVR可提供实时远程视频监控、录像、回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰......
  • WPF DataGrid交错行颜色
    代码如下<!-- AutoGenerateColumns="False"可以避免出现重复列 --><!-- CanUserAddRows="False"去除最后一行空白行 --><DataGridx:Name="datagrid"AlternationCount="2"AutoGenerateColumns="False"CanUserAddRow......
  • LocalDateTime判断时间段归属
    //v2024-02-0207:52:572024-02-0214:39:14//DateinTime=Date.from(Instant.ofEpochMilli(1707150614000L));//LocalDateTimeinTimeLocalDateTime=DateUtil.dateToLocalDateTime(inTime);LocalDateTimeinTime=LocalDateTime.parse("2024-02-01......
  • 判断当前时间是否在"07:07~10:10"格式数据时间段内;
    /***判断当前时间是否在"07:07~10:10"格式数据时间段内;*@param`timeStr`*@return*/privatebooleanisInTimeRange(StringtimeStr){String[]parts=timeStr.split("[~|:]");if(parts.length!=4){......
  • js判断2个时间段是否有重叠(时分)
    原理:1天1440分钟,每个时间段都有对应的数值,生成2个数组,判断数组中是否有重叠数字isTimeOverlap(startA,endA,startB,endB){if(!startA||!endA||!startB||!endB)returnfalseletsA=this.dealTime(startA);letsB=this.dealTime(startB)......
  • nginx根据时间段打开或者关闭某配置项
    先看问题boss提了一个怪异的需求:每天上班时间8.30-18点可以访问某些url,其他时间段403。如何解决可以使用nginx的ngx_http_map_module模块结合ngx_http_access_module模块来实现具体操作步骤如1.在nginx中定义map,用来映射时间段,开关状态,url信息#nginx$time_local是一个nginx配置文......