输入时间,找出3小时后的工作时间点,如果遇到休息时间,需要跳过(就是休息时间不计时),输入时间格式:2020-03-21 14:23:31

输入时间,找出3小时后的工作时间点,如果遇到休息时间,需要跳过(就是休息时间不计时),输入时间格式:2020-03-21 14:23:31
输入时间范围:1900-01-01 00:00:00,2050-01-01 00:00:00
工作时间:周一至周五,上午8:00至12:00,下午2:00,至18:00
!!!!请注意题目各种情况 !!!!

测试用例如:
输入2020-03-20 14:23:31(星期五), 返回 2020-03-20 17:23:31
输入2020-03-20 05:23:31(星期五), 返回 2020-03-20 11:00:00

!!!!把各种题目可能出现情况完善测试用例,保存到代码后面!!!!

思路:将所有时间统一转为Unix毫秒

使用getTime()获取1970 年 1 月 1 日至输入时间的毫秒数。

再拼接一个不带秒不带分钟不带小时输入时间,再获取一次

最后两个一减,得到一个输入时间当天的零头毫秒数res

这个res就是关键,如果是工作日,那就看他在哪个区间,进行判断就行了

JS Date对象:https://www.runoob.com/jsref/jsref-obj-date.html

各种情况:

  1. 周六就加两天到下周一11点完工
  2. 周日就加一天到下周一11点完工
  3. 工作日就判断res在哪个区间,在休息时间,就输出下一个上班时间加3小时
  4. 在上班时间就先加三小时看看还在不在上班时间,再就输出
  5. 不在就加即将休息的那段时间

一天流程

FLowchart流程图

Created with Raphaël 2.2.0 开始 输入日期是否在 规定范围? 输入时间是否 为休息时间? 到下一个工作时间 加三小时输出 加三个小时 输出时间是否 为上班时间? 输出时间 加上下个休息时段输出 结束 提示输入错误 yes no yes no yes no
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
</head>
<style>
  .content{
    display: flex;
    justify-content: center;
    align-items: center;
    margin-top: 300px;
  }
  .intput_time{
    display: inline-block;
    width: 400px;
    height: 30px;
  }
  .btn{
    height: 35px;
  }
  .res{
    display: inline-block;
    width: 300px;
    margin-left: 500px;
    margin-top: 100px;
  }
</style>
<body> 
    <div class="content">
      <input type="input" class="intput_time" placeholder="请输入时间,格式:2020-03-21 14:23:31" value="2020-12-08 00:00:31"> 
      <button class="btn">确定</button>
      
    </div>
    <input class="res" value="2020-03-21 14:23:31"></input>


<script>
     // |周一:0______8------12_____14--------18_____0周二0______8
  
  $(".btn").click(function(){
    var newdate = new Date($(".intput_time").val().replace(/-/g, "/"))//输入的时间转date对象
    var newdate_sec = newdate.getTime()//设置秒数形式时间

    var newdate_year = newdate.getFullYear()
    var newdate_month = newdate.getMonth()+1
    var newdate_day = newdate.getDate()
    var newdate_hours = newdate.getHours()
    var newdate_min = newdate.getMinutes()
    var newdate_miao = newdate.getSeconds()

    var oneDay = 1000 * 60 * 60 * 24; //一天的毫秒数
    var MonWork = 1000 * 60 * 60 * 8//0-----8休息时段
    var TwoWork = 1000 * 60 * 60 * 2//12----14休息时段
    var ThrWork = 1000 * 60 * 60 * 6//18----24点休息时段
    var Worktime1 = 1000 *60 * 60 *3 //上班三小时

    var newdate_res = Date.parse(newdate_month.toString()+","+newdate_day.toString()+","+newdate_year.toString())//输入日期当天到阈值
    var now_res = Date.parse(newdate)//输入日期到阈值

    // console.log("最大值具1970多少秒"+now_res);2524579200000
    // console.log("最小值具1970多少秒"+now_res);-2209017600000

    var res = now_res-parseInt(newdate_res)//今天零点到输入时间的毫秒数

    var todayZero = newdate_sec - res //今天归零!!!

  if (now_res >= -2209017600000 && now_res <= 2524579200000 ) {//满足输入条件
    
    //定义处理秒速时间的方法
    function getToday(date) {
     var newdate_year = newdate.getFullYear()
    var newdate_month = newdate.getMonth()+1
    var newdate_day = newdate.getDate()
    var newdate_hours = newdate.getHours()
    var newdate_min = newdate.getMinutes()
    var newdate_miao = newdate.getSeconds()
      if (newdate_day<10) {
        newdate_day = "0"+newdate_day.toString()
      }
      if (newdate_month<10) {
        newdate_month = "0"+newdate_month.toString()
      }
      if (newdate_hours<10) {
        newdate_hours = "0"+newdate_hours.toString()
      }
      if (newdate_min<10) {
        newdate_min = "0"+newdate_min.toString()
      }
      if (newdate_miao<10) {
        newdate_miao = "0"+newdate_miao.toString()
      }
        return `${newdate_year}-${newdate_month}-${newdate_day}\xa0${newdate_hours}:${newdate_min}:${newdate_miao}`
    }
    //判断输入时间是否在合理范围
    

    //输入时间是否是周末
    var newdate_week = newdate.getDay()  //获取输入时间的星期
    // 判断是否是星期六或星期天
    if(newdate_week==0||newdate_week==6){
      //是星期六或者星期天
      //输出下一个周一11点
      if(newdate_week==0){//星期天
        var workdate = todayZero + oneDay  + MonWork + Worktime1//统一设置为下个星期一11:00
        newdate.setTime(workdate)
        var restime = getToday(workdate)
        console.log(restime);
      }else{
        var workdate = todayZero + oneDay*2  + MonWork + Worktime1//统一设置为下个星期一0:00
        newdate.setTime(workdate)
        var restime = getToday(workdate)
        console.log(restime);
      }
      
    }else{
      //不是周末
      //判断是否是处在某个阈值中
      if(res<=28800000){//在00到08之间 输出11点
        var workdate = todayZero + MonWork + Worktime1
        newdate.setTime(workdate)
        var restime = getToday(workdate)
        console.log(restime);
        // else if (28800000<res<=43200000)
      }else if (res<=43200000 && 28800000<res){//开始工作时间 8:00到12:00 没在休息
        var workdate = now_res  + Worktime1//加三小时看看在不在休息
        if(workdate<=43200000){//工作完成时间在工作时间内 直接输出
          newdate.setTime(workdate)
          var restime = getToday(workdate)
          console.log("8:00到12:00 干完了");
          console.log(restime);
        }else if (workdate>43200000){//还没干完,下个工作时段接着干 加个12点的休息时间
          var workdate = workdate + TwoWork
          newdate.setTime(workdate)
          var restime = getToday(workdate)
          console.log(restime);
          console.log("8:00到12:00没干完");
        }
      }else if(43200000<res && res<=50400000){//12-14休息时间开工,直接输出17点
        var workdate = todayZero +(17*60*60*1000) 
        newdate.setTime(workdate)
        var restime = getToday(workdate)
        console.log(restime);
        console.log("12-14休息时间开工,直接输出17点");
      }else if(50400000<res && res<=64800000){//14-18工作时间开工
      //先加三小时
        var workdate = now_res  + Worktime1
        if(workdate>50400000 && workdate<64800000){//工作时间内完成 直接输出
          newdate.setTime(workdate)
          var restime = getToday(workdate)
          console.log("14:00到18:00 干完了");
          console.log(restime);
        }else if (workdate>64800000){//工作时间内没有完成 
          var workdate = workdate + ThrWork + MonWork 
          newdate.setTime(workdate)
          var restime = getToday(workdate)
          console.log(restime);
          console.log("14:00到18:00 没干完");
        }
      }else if (res>64800000){//18-00到第二天08休息时间 直接输出第二天11点
          var workdate = todayZero + oneDay + MonWork + Worktime1
          newdate.setTime(workdate)
          var restime = getToday(workdate)
          console.log(restime);
          console.log("18-00到第二天08休息时间 直接输出第二天11点");
      }
    }
    $(".res").val(restime)
  }//满足输入条件的if
  else{
    $(".res").val("输入时间不在范围内")
  }
  })//点击事件
</script>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值