请假时间算法

1、开始时间小于9点从9点开始
2、结束时间大于18点 算到18点
3、开始时间-结束时间 跨越 12-13 点 请假小时数减去一个小时
4、按一天8小时这算成请假天数
5、不满一个小时按一个小时算
function diffTime(begin_time, endtime) {
  begin_time = new Date(begin_time)
  endtime = new Date(endtime)
  //开始时间的小时和分钟
  let s_h = begin_time.getHours()
  let s_mm = begin_time.getMinutes()
  let e_h = endtime.getHours()
  let e_mm = endtime.getMinutes()
  let diff_day = Math.floor((+endtime - begin_time) / (3600 * 24 * 1000)) // 间隔天数
  let diff_hours // 间隔小时
  let diff_minutes // 间隔分钟
  if (s_h < 9) {
    // 开始小时早于9点,从9点起算
    s_h = 9
    s_mm = 0
  }
  if (e_h > 18) {
    // 结束时间晚于18点,到18点止
    e_h = 18
    e_mm = 0
  }
  if (e_mm < s_mm) {
    // 结束分钟数<开始分钟数,向小时借
    e_mm += 60
    e_h--
  }
  diff_minutes = e_mm - s_mm
  if (diff_day > 1) {
    // 跨天
    diff_hours = 18 - s_h + (e_h - 9)
    // 如果开始时间小于12点 请假小时数-1
    diff_hours = s_h <= 12 ? diff_hours - 1 : diff_hours
    // 如果结束时间大于13点,请假小时数-1
    diff_hours = e_h >= 13 ? diff_hours - 1 : diff_hours
  } else {
    // 不跨天
    // 开始时间-结束时间跨越午休时间,间隔小时数-1
    diff_hours = s_h <= 12 && e_h >= 13 ? e_h - s_h - 1 : e_h - s_h
  }
  let diff = ((diff_day > 1 ? diff_day - 1 : diff_day) * 8 + diff_hours + (diff_minutes > 0 ? 1 : 0)) * 3600 * 1000
  return +(diff / (3600 * 8 * 1000)).toFixed(1)
}
let kk = diffTime('2018-5-6 09:20:20', '2018-5-8 14:20:21')
console.log(kk)
复制代码

转载于:https://juejin.im/post/5d567c775188255d827cdae4

你可能感兴趣的:(请假时间算法)