//计算请假时长,验证时间格式
function calctimelong(obj, guid) {
var previous = parseFloat($('#TimeLong' + guid).val());
$('#TimeLong' + guid).val('0');
var leavestartdate = $('#LeaveStartDate' + guid).val().trim();
var leaveenddate = $('#LeaveEndDate' + guid).val().trim();
var leavestarttime = $('#LeaveStartTime' + guid).val().trim();
var leaveendtime = $('#LeaveEndTime' + guid).val().trim();
if (leavestartdate == '' || leaveenddate == '' || leavestarttime == '' || leaveendtime == '') return;
if (!testTimeFormatter(leavestarttime) || !testTimeFormatter(leaveendtime)) {
$('#LeaveStartTime' + guid).val('00:00');
$('#LeaveEndTime' + guid).val('00:00');
$('#TimeLong' + guid).val('0');
$.messager.alert("提示", "时间格式不正确", "Info", function () {
});
return;
}
if (leavestarttime == '00:00') leavestarttime = "08:30";
if (leaveendtime == '00:00') leaveendtime = "18:00";
var dt1 = Date.parse(new Date((leavestartdate + " " + leavestarttime).replace(/-/g, "/")));
var dt2 = Date.parse(new Date((leaveenddate + " " + leaveendtime).replace(/-/g, "/")));
if (dt1.toString() == 'NaN' || dt2.toString() == 'NaN') {
$('#LeaveStartTime' + guid).val('00:00');
$('#LeaveEndTime' + guid).val('00:00');
$('#TimeLong' + guid).val('0');
$.messager.alert("提示", "时间格式不正确", "Info", function () { });
return;
}
if (dt1 > dt2) {
$('#LeaveEndDate' + guid).val('');
$('#LeaveEndTime' + guid).val('00:00');
$('#TimeLong' + guid).val('0');
$.messager.alert("提示", "请假开始时间不能大于结束时间", "Info");
return;
}
var s1 = Date.parse(new Date((leavestartdate + " 08:30:00").replace(/-/g, "/")));
var s2 = Date.parse(new Date((leavestartdate + " 12:00:00").replace(/-/g, "/")));
var s3 = Date.parse(new Date((leavestartdate + " 13:30:00").replace(/-/g, "/")));
var s4 = Date.parse(new Date((leavestartdate + " 18:00:00").replace(/-/g, "/")));
var e1 = Date.parse(new Date((leaveenddate + " 08:30:00").replace(/-/g, "/")));
var e2 = Date.parse(new Date((leaveenddate + " 12:00:00").replace(/-/g, "/")));
var e3 = Date.parse(new Date((leaveenddate + " 13:30:00").replace(/-/g, "/")));
var e4 = Date.parse(new Date((leaveenddate + " 18:00:00").replace(/-/g, "/")));
var workdays = '@strworkday'.split(',');
var difdt = 0;//请假时长
var fdifdt = 0; //第一天时长
var mdifdt = 0; //中间日期时长
var edifdt = 0; //最后一天时长
/*******************************计算请假时长(根据工作日表)*********************************/
if (leavestartdate == leaveenddate) {
if (workdays.indexOf(leavestartdate) >= 0) {//工作日
if (dt1 < s1) dt1 = s1;
else if (dt1 >= s2 && dt1 < s3) dt1 = s3;
else if (dt1 > s4) dt1 = s4;
if (dt2 < e1) dt2 = e1;
else if (dt2 >= e2 && dt2 < e3) dt2 = e2;
else if (dt2 > e4) dt2 = e4;
fdifdt = dt2 - dt1;//时差毫秒
if (dt1 <= s2 && dt2 >= e3) fdifdt = fdifdt - 1.5 * 60 * 60 * 1000;
}
} else if (datediff(leavestartdate, leaveenddate) == 1) {
if (workdays.indexOf(leavestartdate) >= 0) {//第一天工作日
if (dt1 < s1) dt1 = s1;
else if (dt1 >= s2 && dt1 < s3) dt1 = s3;
else if (dt1 > s4) dt1 = s4;
fdifdt = s4 - dt1;//时差毫秒
if (dt1 <= s2) fdifdt = fdifdt - 1.5 * 60 * 60 * 1000;
}
if (workdays.indexOf(leaveenddate) >= 0) {//最后一天工作日
if (dt2 < e1) dt2 = e1;
else if (dt2 >= e2 && dt2 < e3) dt2 = e2;
else if (dt2 > e4) dt2 = e4;
edifdt = dt2 - e1;//时差毫秒
if (dt2 >= e3) edifdt = edifdt - 1.5 * 60 * 60 * 1000;
}
} else if (datediff(leavestartdate, leaveenddate) > 1) {
if (workdays.indexOf(leavestartdate) >= 0) {//第一天工作日
if (dt1 < s1) dt1 = s1;
else if (dt1 >= s2 && dt1 < s3) dt1 = s3;
else if (dt1 > s4) dt1 = s4;
fdifdt = s4 - dt1;//时差毫秒
if (dt1 <= s2) fdifdt = fdifdt - 1.5 * 60 * 60 * 1000;
}
if (workdays.indexOf(leaveenddate) >= 0) {//最后一天工作日
if (dt2 < e1) dt2 = e1;
else if (dt2 >= e2 && dt2 < e3) dt2 = e2;
else if (dt2 > e4) dt2 = e4;
edifdt = dt2 - e1;//时差毫秒
if (dt2 >= e3) edifdt = edifdt - 1.5 * 60 * 60 * 1000;
}
var tmpdate = leavestartdate;
for (var i = 0; i < datediff(leavestartdate, leaveenddate) - 1 ; i++) {
tmpdate = new Date(new Date(tmpdate).getTime() + 24 * 60 * 60 * 1000);
var year = tmpdate.getFullYear();
var month = tmpdate.getMonth() + 1;
var date = tmpdate.getDate();
tmpdate = year + '-' + month + '-' + date;
if (workdays.indexOf(tmpdate) >= 0) { mdifdt = mdifdt + 8; }
}
mdifdt = mdifdt * 60 * 60 * 1000;
}
/**************************************************************************/
difdt = fdifdt + mdifdt + edifdt;//请假时长
//计算时间差的毫秒数
var hours = (difdt / (3600 * 1000)).toFixed(2);
if (hours < 0) hours = 0.00;
$('#TimeLong' + guid).val(hours);
if (previous != hours) {
//清空选择的时期和工时
showstr = "<span>选择调休使用工时日期</span>";
$('#sdate' + guid).val('');
$('#edate' + guid).val('');
$('#TimeAtDays' + guid).empty();
$('#TimeAtDays' + guid).append(showstr);
$('#chooselongtotal' + guid).val(0);
$('#TimeAtDaysHidden' + guid).val('');
}
}
//当请假事由发生变化时
function onreasonchange(obj, guid) {
if ($(obj).val() == '调休') {
$('#TimeAtDays' + guid).css('display', 'block');
} else {
$('#TimeAtDays' + guid).css('display', 'none');
}
}
//计算日期相差天数
function datediff(d1, d2) {
var day = 24 * 60 * 60 * 1000;
try {
var dateArr = d1.split("-");
var checkDate = new Date();
checkDate.setFullYear(dateArr[0], dateArr[1] - 1, dateArr[2]);
var checkTime = checkDate.getTime();
var dateArr2 = d2.split("-");
var checkDate2 = new Date();
checkDate2.setFullYear(dateArr2[0], dateArr2[1] - 1, dateArr2[2]);
var checkTime2 = checkDate2.getTime();
var cha = (checkTime2 - checkTime) / day;
return cha;
} catch (e) {
return false;
}
}
计算两个日期之前的工作日时长(小时)
最新推荐文章于 2023-01-19 11:41:14 发布