本案例将介绍,输入开始时间和结束时间后,如何精准计算除特定时间之外的时长。
输入具体的开始时间和结束时间后,自动计算出精确的时长,效果如下:
在学习之前建议安装 计算除休息时间的工作时长 应用模板,本文将按照模板中的示例数据进行讲解。
以计算实际工作时长为例,其中假设上班时间为 8:30-18:00,午休时间为 12:00-13:30,晚餐时间为 18:30-19:00。
新建「实际工作时长计算」表单,字段设置如下:
字段名称 | 字段类型 |
开始时间 | 日期时间(年-月-日 时:分) |
结束时间 | 日期时间(年-月-日 时:分) |
开始数字 | 数字 |
结束数字 | 数字 |
实际工作时长 | 单行文本 |
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)
设置好公式记得点击「确定」保存。
效果演示参见本文【1.3 预期效果】。