计算请假天数,笼统来说就是计算两个日期的差值。对于JS来说,两个时间直接相减,得到的是这两个时间差的毫秒数。
先上代码后贴图。
1.测试数据
后文中用到的测试数据如下:
var dateStart = '2018-12-01 04:15',
dateEnd= '2018-12-08 12:15';
var MS_HOUR = 1000*60*60;
2.时间差毫秒数
普通计算两个时间差的方法如下:
functiongetDiff(start, end)
{var s =Date.parse(start),
e=Date.parse(end);//取绝对值
return Math.abs(e -s);
}console.log(getDiff(dateStart, dateEnd));
输出:633600000
3.时间差小时数
计算两个时间差的小时数:
functiongetDiffByHour(start, end)
{/****
* start:请假开始时间
* end:请假结束时间
* 计算小时数(1位小数)
* ***/
var s =Date.parse(start),
e=Date.parse(end);//取绝对值
var diff = Math.abs(e -s);return (diff / (1000 * 60 * 60)).toFixed(1);
}
console.log(getDiffByHour(dateStart, dateEnd));
输出:176.0
4.简单请假规则
不同单位对请假的限制条件不同,现规定请假天数计算规则如下:
1、请假半天记0.5天;
2、小于半天部分,1小时计0.1天,2小时计0.2天,以此类推
那么计算逻辑也还比较简单:
functiongetDiffByDay(start, end)
{/****
* start:请假开始时间
* end:请假结束时间
* 计算天数,半天按0.5天计算,小于半天,1小时计0.1天,2小时计0.2天,3小时计0.3天,4小时计0.4天(1位小数)
* ***/
var s =Date.parse(start),
e=Date.parse(end);//取绝对值
var diff = Math.abs(e -s);var result = 0,
hour= Math.floor(diff / (1000 * 60 * 60)),
day= Math.floor(diff / (1000 * 60 * 60 * 24));
result=day;if (day > 0)
{//去掉天数部分,仅留小时数
hour -= day * 24;
}if (hour > 5)
{//如果大于半天(5小时)
result += 0.5;
hour= Math.floor((diff - (day * 24 + 5) * 1000 * 60 * 60) / (1000 * 60 * 60));
}if (hour > 1)
{
result+= hour * 0.1;
}returnresult;
}
console.log(getDiffByDay(dateStart, dateEnd));
输出:7.8
5.复杂请假规则
倘若规定上下班时间,中午休息时间,工作时长等等,那计算的逻辑就相当复杂了。
现规定上下班及午休时间如下:
上班时间:8:00
下班时间:18:00
午休时间:12:00-14:00
(正常日工作时长:8小时)
那么,请假1小时则为1/8天,4小时即为0.5天。
简单分析:
1.请假时段在同一天内,直接计算