计算加班时间除去午休及晚餐时间(暂未实现跨天请假)

/**
 * 计算一天内加班时长
 * @param {Object} beginTime    开始时间
 * @param {Object} endTime      结束时间
 * @param {Object} isFreeTime  是否要去除午休、晚餐时长
 * @param {Object} freeTimeMon  午休开始时间
 * @param {Object} freeTimeAft  午休结束时间
 * @param {Object} dinnerTimeMon  晚餐开始时间
 * @param {Object} dinnerTimeAft  晚餐结束时间
 * 
 */
import Vue from 'vue'

export function getovertime(beginTime, endTime, isFreeTime, freeTimeMon, freeTimeAft, dinnerTimeMon, dinnerTimeAft) {
	var days;
	var hours;
	var date;
	var freeTime = freeTimeAft - freeTimeMon;
	var dinnerTime = dinnerTimeAft - dinnerTimeMon;

	beginTime = beginTime.replace(/-/g, '/');
	var beginArr = beginTime.split(" ");
	var beginMonth = parseInt(beginArr[0].split("/")[1]);
	var beginDay = parseInt(beginArr[0].split("/")[2]);
	var beginHours = parseInt(beginArr[1].split(":")[0]);
	var beginMin = parseInt(beginArr[1].split(":")[1]);
	var beginHoursMin = beginHours + beginMin / 60;

	endTime = endTime.replace(/-/g, '/');
	var endArr = endTime.split(" ");
	var endMonth = parseInt(endArr[0].split("/")[1]);
	var endDay = parseInt(endArr[0].split("/")[2]);
	var endHours = parseInt(endArr[1].split(":")[0]);
	var endMin = parseInt(endArr[1].split(":")[1]);
	var endHoursMin = endHours + endMin / 60;

	if(isFreeTime == true) {
		if(endHoursMin >= freeTimeMon && endHoursMin <= freeTimeAft) {
			//如果结束时间在午休开始前,并且结束时间在freeTimeMon和freeTimeAft之间都算freeTimeMon
			endHoursMin = freeTimeMon;
			console.log(1)
		} else if(endHoursMin >= dinnerTimeMon && endHoursMin <= dinnerTimeAft) {
			//如果结束时间在晚餐开始前,并且结束时间在dinnerTimeMon和dinnerTimeAft之间都算dinnerTimeMon
			endHoursMin = dinnerTimeMon;
			console.log(2)
		}
		if(beginHoursMin >= freeTimeMon && beginHoursMin <= freeTimeAft) {
			//如果开始时间在午休间,开始时间都算freeTimeAft
			beginHoursMin = freeTimeAft
			console.log(3)
		} else if(beginHoursMin >= dinnerTimeMon && beginHoursMin <= dinnerTimeAft) {
			//如果开始时间在晚餐间,开始时间都算dinnerTimeAft
			beginHoursMin = dinnerTimeAft
			console.log(4)
		}
	}

	//获取结束时间-开始时间的天数
	var daysBetweenlist = daysBetween(beginTime, endTime);
	var daysBetweenLen = daysBetweenlist.length;
	if(beginTime > endTime) {
		Vue.prototype.$Message.warning({
			content: '开始时间需小于结束时间',
			duration: 3
		});
		return false;
	}
	if(isFreeTime == true) {
		var hour = 7.5; //一天工作时长
		if(daysBetweenLen == 1) {
			//同一天
			if(beginHoursMin - freeTimeMon <= 0) { //午休前开始
				if(endHoursMin - freeTimeAft >= 0 && endHoursMin - dinnerTimeAft <= 0) { //午休后晚餐前结束
					hours = (endHoursMin) - (beginHoursMin) - freeTime;
				} else if(endHoursMin - dinnerTimeAft >= 0) { //晚餐后结束
					hours = (endHoursMin) - (beginHoursMin) - freeTime - dinnerTime;
				} else if(endHoursMin - freeTimeMon <= 0) { //午休前结束
					hours = (endHoursMin) - (beginHoursMin)
				}
			} else if(beginHoursMin - freeTimeAft >= 0 && endHoursMin - dinnerTimeAft <= 0) { //午休后晚餐前开始
				if(endHoursMin - dinnerTimeAft >= 0) { //晚餐后结束
					hours = (endHoursMin) - (beginHoursMin) - dinnerTime;
				} else { //晚餐前结束
					hours = (endHoursMin) - (beginHoursMin)
				}
			} else if(endHoursMin - dinnerTimeAft >= 0) { //晚餐后开始
				hours = (endHoursMin) - (beginHoursMin)
			}
		} else {
			Vue.prototype.$Message.warning({
				content: '不可跨天调班哦~',
				duration: 3
			});
			return false;
		}
		days = Math.floor(hours / hour);
		var hours1 = hours % hour; //换算成天数
		date = {
			"days": days,
			"hours": hours1,
			"time": hours //不换算成天数
		};

	}
	return date;
}

/**
 * 根据两个日期,判断相差天数
 * @param sDate1 开始日期 如:2016-11-01
 * @param sDate2 结束日期 如:2016-11-02
 * @returns {number} 返回相差天数
 */
export function daysBetween(sDate1, sDate2) {
	var arr = [];
	sDate1 = sDate1.substring(0, 10);
	sDate2 = sDate2.substring(0, 10);
	var startTime = gDate(sDate1);
	var endTime = gDate(sDate2);
	while((endTime.getTime() - startTime.getTime()) >= 0) {
		var year = startTime.getFullYear();
		var month = startTime.getMonth().toString().length == 1 ? "0" + startTime.getMonth().toString() : startTime.getMonth();
		var day = startTime.getDate().toString().length == 1 ? "0" + startTime.getDate() : startTime.getDate();
		arr.push(year + "/" + month + "/" + day);
		startTime.setDate(startTime.getDate() + 1);
	}
	return arr;
}

export function gDate(datestr) {
	datestr = datestr.replace(/-/g, '/');
	var temp = datestr.split("/");
	var date = new Date(temp[0], temp[1], temp[2]);
	return date;
}

/**
 * 计算一天内加班时长
 * @param {Object} beginTime    开始时间
 * @param {Object} endTime      结束时间
 * @param {Object} isFreeTime  是否要去除午休、晚餐时长
 * @param {Object} freeTimeMon  午休开始时间
 * @param {Object} freeTimeAft  午休结束时间
 * @param {Object} dinnerTimeMon  晚餐开始时间
 * @param {Object} dinnerTimeAft  晚餐结束时间
 * 
 * 
 */

//计算一天内加班时长-wjq

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值