计算加班类型以及小时数(js)

function GetDateDiff(startTime, endTime, diffType) {
//将xxxx-xx-xx的时间格式,转换为 xxxx/xx/xx的格式
startTime = startTime.replace(/\-/g, "/");
endTime = endTime.replace(/\-/g, "/");
//将计算间隔类性字符转换为小写
diffType = diffType.toLowerCase();
var sTime = new Date(startTime); //开始时间
var eTime = new Date(endTime); //结束时间
//作为除数的数字
var timeType = 1;
switch (diffType) {
case "second":
timeType = 1000;
break;
case "minute":
timeType = 1000 * 60;
break;
case "hour":
timeType = 1000 * 3600;
break;
case "day":
timeType = 1000 * 3600 * 24;
break;
default:
break;
}
return parseFloat((eTime.getTime() - sTime.getTime()) / parseFloat(timeType));
}

function Fun_GetJiaBanTypeTatalHour(vstartdate, vstarthour, vstartmin, venddate, vendhour, vendmin) {

if (GetDateDiff(vstartdate, venddate, "day") > 1) {
alert("填写的加班时间已大于24小时,请检查后重新输入!!!");
return;
}
if (GetDateDiff(vstartdate, venddate, "second") < 0) {
alert("加班开始时间大于加班结束时间,请检查后重新输入!!!");
return;
}

//判断开始日期的日期类型
var CountryHoliday = "2018-01-01, 2018-02-16, 2018-02-17, 2018-02-18, 2018-04-05, 2018-05-01, 2018-06-18, 2018-09-24, 2018-10-01, 2018-10-02, 2018-10-03";
var isCountryHoliday;


var startdate_comebine = vstartdate + " " + vstarthour + ":" + vstartmin;
var venddate_zero = venddate + ' ' + '00:00:00';
var enddate_comebine = venddate + ' ' + vendhour + ':' + vendmin;

var start_end_Hour = GetDateDiff(startdate_comebine, enddate_comebine, "hour");
var start_zero_Hour = GetDateDiff(startdate_comebine, venddate_zero, "hour");
var zero_end_Hour = GetDateDiff(venddate_zero, enddate_comebine, "hour");

var totalhour_holiday; var totalhour_week; var totalhour_day; var start_zero_Hour; var zero_end_Hour; var start_end_Hour;


var isCountryHoliday_startDate;
var isCountryHoliday_endDate;

var isWeek_vstartdate;
var isWeek_venddate;

var CH = CountryHoliday.split(",");

//开始日期是否是法定假日
for (g = 0; g < CH.length; g++) {

if (vstartdate == CH[g]) {
isCountryHoliday_startDate = true;
break;
} else {
isCountryHoliday_startDate = false;
}
}
//结束日期是否是法定假日
for (g = 0; g < CH.length; g++) {

if (venddate == CH[g]) {
isCountryHoliday_endDate = true;
break;
} else {
isCountryHoliday_endDate = false;
}
}

//开始日期是否是周末
var startdate_replace = vstartdate.replace(/-/g, '/');
var startdate_result = new Date("" + startdate_replace + "");

if (startdate_result.getDay() == "0" || startdate_result.getDay() == "6") {
isWeek_vstartdate = true;
} else {
isWeek_vstartdate = false;
}


//结束日期是否是周末
var venddate_replace = venddate.replace(/-/g, '/');
var venddate_result = new Date("" + venddate_replace + "");

if (venddate_result.getDay() == "0" || venddate_result.getDay() == "6") {
isWeek_venddate = true;
} else {
isWeek_venddate = false;
}


//开始日期和结束日期不相同的情况
if (vstartdate != venddate) {
//首先判断开始日期是否是法定假日
if (isCountryHoliday_startDate) {
//开始日期是法定假日 然后判断结束日期是否是法定假日
if (!isCountryHoliday_endDate) {
if (isWeek_venddate) {
alert("结束日期是双休日");
totalhour_week = zero_end_Hour;
totalhour_day = 0; totalhour_holiday = start_zero_Hour;
} else {
//只是工作日
alert("结束日期是工作日");
totalhour_day = zero_end_Hour; totalhour_week = 0; totalhour_holiday = start_zero_Hour;
}
} else {
totalhour_day = 0; totalhour_week = 0; totalhour_holiday = start_end_Hour;
}
} else {
//开始日期不是法定假日 那么开始日期只有两种情况 双休日或者工作日
//--如果开始日期不是法定假日 则判断是否是双休日
if (isWeek_vstartdate) {
//开始日期是双休日
//--继续判断结束日期是否是双休日
if (!isWeek_venddate) {
//结束日期不是双休日
if (isCountryHoliday_endDate) {
// 先判断结束日期是否是法定假日
totalhour_day = 0;
totalhour_week = start_zero_Hour;
totalhour_holiday = zero_end_Hour;
} else {
//结束日期不是法定假日 则结束日期是工作日
totalhour_holiday = 0;
totalhour_week = start_zero_Hour;
totalhour_day = zero_end_Hour;
}
} else {
//结束日期和开始日期类型相同都是双休日
totalhour_day = 0;
totalhour_holiday = 0;
totalhour_week = start_end_Hour;
}
} else {//开始日期是工作日
//如果开始日期不是法定假日 不是双休日,那么开始日期为工作日
//继续判断结束日期 是否为法定假日
if (isCountryHoliday_endDate) {
//结束日期是法定假日
totalhour_week = 0;
totalhour_day = start_zero_Hour;
jiabantype_holiday = zero_end_Hour;
} else {
//结束日期为双休日或者工作日
if (isWeek_venddate) {
//结束日期是双休日
totalhour_day = start_zero_Hour;
totalhour_week = zero_end_Hour;
totalhour_holiday = 0;
} else {
//结束日期是工作日
totalhour_day = start_end_Hour;
totalhour_holiday = 0;
totalhour_week = 0;
}
}
}
}
}
//开始日期和结束日期相同的情况
else {

//是法定假日
if (isCountryHoliday) {
//。。。。。
totalhour_holiday = start_end_Hour; totalhour_day = 0; totalhour_week = 0;
} else {
//判断是否是周末
var sdate_replace = vstartdate.replace(/-/g, '/');
var sdate = new Date("" + sdate_replace + "");

if (sdate.getDay() == "0" || sdate.getDay() == "6") {
//是周末
//计算小时 时差
totalhour_week = start_end_Hour;
totalhour_day = 0; totalhour_holiday = 0;
} else {
//只是工作日
totalhour_day = start_end_Hour; totalhour_week = 0; totalhour_holiday = 0;
}
}
}
//alert("工作日 " + totalhour_day + " 双休日 " + totalhour_week + " 法定假日 " + totalhour_holiday);
document.getElementById('sResult').value= "工作日 " + totalhour_day + "(小时) 双休日 " + totalhour_week + "(小时) 法定假日 " + totalhour_holiday + "(小时)";
}

转载于:https://www.cnblogs.com/yachao1120/p/8556629.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值