👺请假天数计算
计算请假天数,去除周六天、节假日,计算调休时间。
上午固定时间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>
第一次在掘金写,记录一下值得记录的一些遇到的问题