计算除休息时间的工作时长

1. 简介

1.1 案例简介

本案例将介绍,输入开始时间和结束时间后,如何精准计算除特定时间之外的时长。

1.2 应用场景

  • 请假场景中,可以通过请假的开始时间和结束时间,计算除休息时间之外的请假时长;
  • 兼职考勤中,可以通过工作的开始时间和结束时间,计算除休息时间之外的实际工作时长等。

1.3 预期效果

输入具体的开始时间和结束时间后,自动计算出精确的时长,效果如下:

2. 设置方法

在学习之前建议安装 计算除休息时间的工作时长 应用模板,本文将按照模板中的示例数据进行讲解。

以计算实际工作时长为例,其中假设上班时间为 8:30-18:00,午休时间为 12:00-13:30,晚餐时间为 18:30-19:00。

2.1 表单搭建

新建「实际工作时长计算」表单,字段设置如下:

字段名称

字段类型

开始时间

日期时间(年-月-日 时:分)

结束时间

日期时间(年-月-日 时:分)

开始数字

数字

结束数字

数字

实际工作时长

单行文本

2.2 设置公式

1)选中「开始数字」字段,在「字段属性 >> 默认值」处,设置默认值为「公式编辑」,点击下方「编辑公式」:

2)在公式编辑页面,设置「开始数字」字段的公式为VALUE(TEXT(DATE(开始时间),'HHmm')),表示将「开始时间」的时、分部分转化为数字格式存储到该字段中,设置好点击「确定」。

3)同样的方法,设置「结束数字」字段的公式为VALUE(TEXT(DATE(结束时间),'HHmm')),表示将「结束时间」的时、分部分转化为数字格式存储到该字段中,设置好点击「确定」。

4)已知假设的上班时间为 8:30-18:00,午休时间为 12:00-13:30,晚餐时间为 18:30-19:00,故根据开始、结束时间可得出如下实际工作时长的计算方法:

开始、结束时间

实际工作时长计算方法

开始<830,结束<=1200

结束数字-830

开始<830,结束>1200,结束<=1330

1200-830

开始<830,结束>1330,结束<=1800

结束数字-830-1.5

开始<830,结束>1800,<结束=1900

1800-830-1.5

开始<830,结束>1900

结束数字-830-1.5-0.5

开始>=830,结束<=1200

结束数字-开始数字

开始>=830,开始<1200,结束>=1200,结束<=1330

1200-开始数字

开始>=830,开始<=1200,结束>=1330,结束<=1800

结束数字-开始数字-1.5

开始>=830,开始<=1200,结束>1800,结束<=1900

1800-开始数字-1.5

开始>=830,开始<=1200,结束>1900

结束数字-开始数字-1.5-0.5

开始>1200,开始<=1330,结束<=1330

0

开始>1200,开始<=1330,结束>1330,结束<=1800

结束数字-1330

开始>1200,开始<=1330,结束>1800,结束<=1900

1800-1330

开始>1200,开始<=1330,结束>1900

结束数字-1330-0.5

开始>1330,结束<=1800

结束数字-开始数字

开始>1330,结束>1800,结束<=1900

1800-开始数字

开始>1330,结束>1900

结束数字-开始数字-0.5

根据上表,可设置「实际工作时长」字段的公式为:

IFS(

AND(开始数字<830,结束数字<=1200),DATEDIF(DATE(YEAR(开始时间),MONTH(开始时间),DAY(开始时间),8,30,0),结束时间,"h"),

AND(开始数字<830,结束数字>1200,结束数字<=1330),DATEDIF(DATE(YEAR(开始时间),MONTH(开始时间),DAY(开始时间),8,30,0),DATE(YEAR(结束时间),MONTH(结束时间),DAY(结束时间),12,0,0),"h"),

AND(开始数字<830,结束数字>1330,结束数字<=1800),DATEDIF(DATE(YEAR(开始时间),MONTH(开始时间),DAY(开始时间),8,30,0),结束时间,"h")-1.5,

AND(开始数字<830,结束数字>1800,结束数字<=1900),DATEDIF(DATE(YEAR(开始时间),MONTH(开始时间),DAY(开始时间),8,30,0),DATE(YEAR(结束时间),MONTH(结束时间),DAY(结束时间),18,0,0),"h")-1.5,

AND(开始数字<830,结束数字>1900),DATEDIF(DATE(YEAR(开始时间),MONTH(开始时间),DAY(开始时间),8,30,0),结束时间,"h")-1.5-0.5,

AND(开始数字>=830,结束数字<=1200),DATEDIF(开始时间,结束时间,"h"),

AND(开始数字>=830,开始数字<=1200,结束数字>=1200,结束数字<=1330),DATEDIF(开始时间,DATE(YEAR(结束时间),MONTH(结束时间),DAY(结束时间),12,0,0),"h"),

AND(开始数字>=830,开始数字<=1200,结束数字>=1330,结束数字<=1800),DATEDIF(开始时间,结束时间,"h")-1.5,

AND(开始数字>=830,开始数字<=1200,结束数字>1800,结束数字<=1900),DATEDIF(开始时间,DATE(YEAR(结束时间),MONTH(结束时间),DAY(结束时间),18,0,0),"h")-1.5,

AND(开始数字>=830,开始数字<=1200,结束数字>1900),DATEDIF(开始时间,结束时间,"h")-1.5-0.5,

AND(开始数字>1200,开始数字<=1330,结束数字<=1330),0,

AND(开始数字>1200,开始数字<=1330,结束数字>1330,结束数字<=1800),DATEDIF(DATE(YEAR(开始时间),MONTH(开始时间),DAY(开始时间),13,30,0),结束时间,"h"),

AND(开始数字>1200,开始数字<=1330,结束数字>1800,结束数字<=1900),DATEDIF(DATE(YEAR(开始时间),MONTH(开始时间),DAY(开始时间),13,30,0),DATE(YEAR(结束时间),MONTH(结束时间),DAY(结束时间),18,0,0),"h"),

AND(开始数字>1200,开始数字<=1330,结束数字>1900),DATEDIF(DATE(YEAR(开始时间),MONTH(开始时间),DAY(开始时间),13,30,0),结束时间,'h')-0.5,

AND(开始数字>1330,结束数字<=1800),DATEDIF(开始时间,结束时间,'h'),

AND(开始数字>1300,结束数字>1800,结束数字<=1900),DATEDIF(开始时间,DATE(YEAR(结束时间),MONTH(结束时间),DAY(结束时间),18,0,0),'h'),

AND(开始数字>1330,结束数字>1900),DATEDIF(开始时间,结束时间,'h')-0.5)

设置好公式记得点击「确定」保存。

2.3 效果演示

效果演示参见本文【1.3 预期效果】。

Copyright(C)2023 HFBangFu Inc. All Rights Reserved 皖ICP备12017563号-5