跳到主要内容

如何计算请假时长

1.场景

自定义设置节假日、请假类型、请假单位,自动计算请假时长

🔗安装方案

2.方案总览

2.1.自定义请假规则

在“请假规则”段落中自定义设置对应的请假规则(字段不可隐藏,如不希望保留相关字段,可将相应数字在【请假时长(分钟)】字段的公式中进行相应的替换)

方案默认请假规则:工作时间段“9:30-12:30,13:30-18:30”,请假单位为半小时(30分钟)

image.png

2.2.自定义休假制度

方案默认设置为双休制度,可通过函数NETWORKDAYS自定义休假制度,准确计算请假时长

"1000001":7个字符分别对应从周日开始的一周7天,"1"代表休息日,"0"代表工作日

image.png

2.3.维护节假日数据

每年定期维护节假日的放假日期和调休日期(支持批量导入),计算请假时长时计算当中包含的节假日和调休日

image.png

2.4.填写请假申请

image.png

3.搭建步骤

3.1.节假日管理

image.png

【假期名称】:单行文字

【日期类型】:单项选择

【放假日期】【调休日期】:日期

【是否原本为工作日】:数字-设置公式

NETWORKDAYS:返回两个日期之间的工作日数(开始日期,结束日期,"1000001")

"1000001"表示什么意思:每个字符表示一周中的一天(从周日开始),共七个字符,其中用0表示工作日,用1表示休息日。"1000001"表示周六和周日为休息日,即双休;如为单休,"1000000",周天为休息日,"0000001",周六为休息日

设置意义:判断放假这一天原本是否为工作日

image.png

3.2.请假申请

【申请人】:成员-动态-当前用户

image.png

【所属部门】:部门-动态-当前部门

image.png

【申请日期】:日期-设置公式

CURDATE:返回当前日期

image.png

【请假类型】:下拉选择

image.png

【开始请假时间】【结束请假时间】:日期

显示格式:年-月-日 时:分

image.png

【节假日天数(原为工作日)】:数据关联-聚合方式“计数”

设置意义:如果请假时间段中包含法定节假日,请假时长的计算方式是除去单休/双休等模式后的工作日天数-这些天数中的法定节假日天数,因此需要统计的是原本应为工作日的法定节假日天数

关联「节假日管理」应用中的字段【放假日期】

筛选条件:放假日期>=开始请假时间[且]放假日期<=结束请假时间[且]是否原本为工作日==1(1表示是工作日),筛选处于请假时间段的放假日期且放假日期原本应为工作日

聚合方式:计数(符合筛选条件的数据有多少条,即有多少天原为工作日的节假日)

image.png

【调休天数】:数据关联-聚合方式“计数”

设置意义:如果请假时间段中包含调休,计算请假时长时需要加上包含的调休天数

关联「节假日设置」应用中的字段【调休日期】

筛选条件:调休日期>=开始请假时间[且]调休日期<=结束请假时间,筛选处于请假时间段的调休日期

聚合方式:计数(符合筛选条件的数据有多少条,即有多少天调休)

image.png

【请假时长(分钟)】:数字-设置公式

请假时间跨越的工作日天数转换为分钟-第一天和最后一天中多计算的请假时长(分钟)

如请假时间:7/26 10:30~7/29 14:00,跨越了4个工作日,需要将7/26的9:30-10:30的一个小时,和7/29的14:00-18:30的四个半小时,全部转换为分钟后从4个整天中减去

计算步骤:

1、计算请假时间跨越的工作日天数

a、先计算工作日的天数

NETWORKDAYS(开始请假时间,结束请假时间,"1000001")

如果不是双休,可以自定义休假时间,如周日单休为"1000000",7个字符对应周日开始的一周7天,1为休息日,0位工作日

b、将(请假时间段中的工作日天数-当中的法定节假日天数+调休天数),计算出实际的工作天数,再乘以*每天的工作时间换算为分钟

(NETWORKDAYS(开始请假时间,结束请假时间,"1000001")-NUM(节假日天数(原为工作日))+NUM(调休天数))*每天工作小时数*60

2、计算开始请假时间和开始上班时间相差的工作时间(换算为分钟)

分为3种情况,用IFS:

1>开始请假时间为上午

a、先判断是否为上午时间,如果上午结束上班时间比开始请假时间晚,即为上午

是和开始请假这一天的上午结束上班时间进行比较,因此先计算这一天的上午结束上班时间:

DATE(YEAR(开始请假时间),MONTH(开始请假时间),DAY(开始请假时间),上午结束上班时间(时),上午结束上班时间(分))

上午结束上班时间比开始请假时间晚:

DAYS(DATE(YEAR(开始请假时间),MONTH(开始请假时间),DAY(开始请假时间),上午结束上班时间(时),上午结束上班时间(分)),开始请假时间)>=0

b、将开始请假时间和开始上班时间都转为时间戳后相减/60000,换算为分钟

(NUM(DATETOTIMESTAMP(开始请假时间))-NUM(DATETOTIMESTAMP(DATE(YEAR(开始请假时间),MONTH(开始请假时间),DAY(开始请假时间),上午开始上班时间(时),上午开始上班时间(分)))))/60000

2>开始请假时间为午休

a、先判断是否为午休时间,如果处于上午结束上班和下午开始上班的中间段的时间,即为午休

AND(

DAYS(开始请假时间,DATE(YEAR(开始请假时间),MONTH(开始请假时间),DAY(开始请假时间),上午结束上班时间(时),上午结束上班时间(分)))>0,

DAYS(DATE(YEAR(开始请假时间),MONTH(开始请假时间),DAY(开始请假时间),下午开始上班时间(时),下午开始上班时间(分)),开始请假时间)>0)

b、开始请假时间和开始上班时间相差的工作时间,就是上午的工作时长

3>开始请假时间为下午

a、先判断是否为下午时间,如果开始请假时间比下午开始上班时间晚,即为下午

DAYS(开始请假时间,DATE(YEAR(开始请假时间),MONTH(开始请假时间),DAY(开始请假时间),下午开始上班时间(时),下午开始上班时间(分)))>=0

b、将开始请假时间和开始上班时间都转为时间戳后相减/60000,换算为分钟,再减去中午午休的时长

(NUM(DATETOTIMESTAMP(开始请假时间))-NUM(DATETOTIMESTAMP(DATE(YEAR(开始请假时间),MONTH(开始请假时间),DAY(开始请假时间),上午开始上班时间(时),上午开始上班时间(分)))))/60000-午休时长(分)

3、计算结束请假时间和下班时间相差的工作时间(换算为分钟)

分为3中情况,用IFS:

1>结束请假时间为上午

a、先判断是否为上午时间,如果上午结束上班时间比结束请假时间晚,即为上午

DAYS(DATE(YEAR(结束请假时间),MONTH(结束请假时间),DAY(结束请假时间),上午结束上班时间(时),上午结束上班时间(分)),结束请假时间)>=0

b、将结束请假时间和下班时间都转为时间戳后相减/60000,换算为分钟,再减去中午午休时长

(NUM(DATETOTIMESTAMP(DATE(YEAR(结束请假时间),MONTH(结束请假时间),DAY(结束请假时间),下午结束上班时间(时),下午结束上班时间(分))))-NUM(DATETOTIMESTAMP(结束请假时间)))/60000-午休时长(分)

2>结束请假时间为午休

a、先判断是否为午休时间,如果处于上午结束上班和下午开始上班的中间段的时间,即为午休

AND(

DAYS(结束请假时间,DATE(YEAR(结束请假时间),MONTH(结束请假时间),DAY(结束请假时间),上午结束上班时间(时),上午结束上班时间(分)))>0,

DAYS(DATE(YEAR(结束请假时间),MONTH(结束请假时间),DAY(结束请假时间),下午开始上班时间(时),下午开始上班时间(分)),结束请假时间)>0)

b、结束请假时间和下班时间相差的工作时间,就是下午的工作时长

3>结束请假时间为下午

a、先判断是否为下午时间,如果结束请假时间比下午开始上班时间晚,即为下午

DAYS(结束请假时间,DATE(YEAR(结束请假时间),MONTH(结束请假时间),DAY(结束请假时间),下午开始上班时间(时),下午开始上班时间(分)))>=0

b、将下班时间和结束请假时间都转为时间戳后相减/60000,换算为分钟

(NUM(DATETOTIMESTAMP(DATE(YEAR(结束请假时间),MONTH(结束请假时间),DAY(结束请假时间),下午结束上班时间(时),下午结束上班时间(分))))-NUM(DATETOTIMESTAMP(结束请假时间)))/60000

将以上公式合并后,(工作日天数-节假日天数+调休天数)*每天工作时长*60-IFS(开始请假时间是上午,相差时长,是午休,相差时长,是下午,相差时长)-IFS(结束请假时间是上午,相差时长,是午休,相差时长,是下午,相差时长)

还需要考虑请假单位,将上方公式最终计算出的请假时长(分钟)/请假单位(分钟),向上取整数后再乘以*请假单位(分钟)

ROUNDUP(请假时长(分钟)/请假单位(分钟),0)*请假单位(分钟)

【请假时长(天)】:数字-设置公式

分钟转换为天

image.png

【请假规则】:段落

段落中的字段:数字

如果不希望保留段落中的这些字段,可在【请假时长(分钟)】字段的公式中进行相应数字的替换

image.png