请假天数计算(半天)

406 阅读1分钟

👺请假天数计算

计算请假天数,去除周六天、节假日,计算调休时间。

上午固定时间08:30 下午固定时间14:00

🙈直接上代码

<template>
  <div>
    <span>{{ days }}</span>
  </div>
</template>

<script>
export default {
  name: 'HelloWorld',
  data () {
    return {
      // 节假日
      festival: ['2022-01-03', '2022-01-31', '2022-02-01', '2022-02-02', '2022-02-03', '2022-02-04', '2022-04-10', '2022-04-05', '2022-06-03', '2022-09-12', '2022-10-03', '2022-10-04', '2022-10-05', '2022-10-06', '2022-10-07'],
      // 调休日期
      weekendWorkDay: ['2022-01-29', '2022-01-30', '2022-04-02', '2022-04-24', '2022-05-07', '2022-10-08', '2022-10-09'],
      // 节假日转时间戳
      festival_list: [],
      // 工作日转时间戳
      weekendWorkDay_list: [],
      days: ''
    }
  },
  created () {
    // 将节假日,周末工作日转换为时间戳
    this.festival.forEach((item) => {
      this.festival_list.push(new Date(item).valueOf())
    })
    this.weekendWorkDay.forEach((item) => {
      this.weekendWorkDay_list.push(new Date(item).getTime())
    })
    this.formatCountDay("2022-09-30 08:30:00", "2022-09-30 08:30:00")

  },
  methods: {
    // 过滤俩天之间的周末节假日,返回距离的天数
    formatCountDay (start, end) {
      const AM = '08:30:00'
      const PM = '14:00:00'
      let startStr = start.slice(0, 10)
      let endStr = end.slice(0, 10)
      var startday = new Date(startStr)
      var endday = new Date(endStr)
      // 总相差天数
      var diffDay = (endday - startday) / (1000 * 60 * 60 * 24) + 1
      // 周末周六天数+节假日
      var weekEnds = 0
      if (start > end) return 0

      // 循环相差天数
      for (var i = 0; i < diffDay; i++) {
        if ((startday.getDay() === 0 || startday.getDay() === 6 || this.festival_list.includes(startday.valueOf())) && !this.weekendWorkDay_list.includes(startday.valueOf())) {
          weekEnds += 1
        } else {
          if (i == 0 && start.indexOf(PM) != -1) {
            weekEnds += 0.5
          } else if (i == diffDay - 1 && end.indexOf(AM) != -1) {
            weekEnds += 0.5
          }
        }
        startday.setDate(startday.getDate() + 1)
      }
      this.days = diffDay - weekEnds
      return diffDay - weekEnds
    }
  }
}
</script>

第一次在掘金写,记录一下值得记录的一些遇到的问题