我正在尝试找到一个公式来计算 Excel 中两个日期之间的营业时间。
营业时间为 09:00 至 17:00,不包括周末。
电子表格当前的布局如下;
A1: Start Time - B1: End Time - C1: Total Business hours
A2: 2016-01-04 10:31:17 - B2: 2016-01-06 10:02:14
是否有一个公式可以用来计算时间差异(营业时间)并将其显示在 C2 中?
答案1
假设日期在同一年并且忽略小的舍入误差,我找到了一个可行的解决方案:
我先解释一下,然后添加下面的公式。
我将解决方案拆分为多个实例,如果
如果 1:日期在同一周
IF(WEEKNUMBER(A2)=WEEKNUMBER(B2);
如果 1.1:日期为同一天
IF(DAY(A2)=DAY(B2));
用结束日期的小时数减去开始日期的小时数=结果
(B2-A2)*24;
如果 1.2:日期不在同一天
将结束日期的天数减去开始日期的天数(=两个日期之间的天数),然后乘以 8(=17-9),再加上小时数差。MOD 函数用于截断日期的天数,只保留时间。
(DAY(B2)-DAY(A2))*(17-9)+(MOD(B2,1)-MOD(A2,1))*24);
如果 2:日期不在同一周
我计算中间几周的小时数,然后将开始日期的小时数添加到开始周的结束日期(幸运的是,一年从星期五开始,所以我只需执行 weeknumber(startdate)*7,最后我将从一周开始到结束日期的小时数添加到开始日期。
(WEEKNUMBER(B2)-WEEKNUMMER(A2)-1)*5*(17-9)+(WEEKNUMBER(A2)*7-QUOTIENT(A2;1))*(17-9)+17+(QUOTIENT(B2;1)-(WEEKNUMBER(B2)*7-4))*(17-9)+(MOD(B2;1)-MOD(A2;1))*24-9)
最后,您只需将所有这些代码放在一起,即可计算日期之间的营业时间。
答案2
这是另一个使用NETWORKDAYS
函数的公式,它允许您指定假期,或者,如果您有更高版本的 Excel,您可以替换NETWORKDAYS.INTL
以指定哪些天是您的周末。
- 每个工作日算8小时
- 减去上午 9 点和实际开始时间之间的时间
- 减去实际结束时间和该日期下午 5 点之间的时间:
=NETWORKDAYS([@[Start Time]],[@[End Time]])*8/24-
([@[Start Time]]-(INT([@[Start Time]])+9/24))-
(INT([@[End Time]])+17/24-[@[End Time]])
由于我们调整为将时间表示为一天的几分之一,因此结果将采用 Excel 日期/时间格式,并且可以格式化为显示秒(如果您愿意)。