Datetime 如何将工作时间与时间一起添加到日期?

Datetime 如何将工作时间与时间一起添加到日期?,datetime,google-sheets,google-sheets-formula,Datetime,Google Sheets,Google Sheets Formula,我想在某个日期增加营业时间。问题是当我在假期设置开始日期时。 例如:我设置 Column A3 - Start date - 2020-07-09 8:01 Column B3 - Add hours: 2 Column E2 - Start hour: 8:00 Column F2 - End hour: 17:30 Column G2:G - Holiday: 9/7/2020 我用了这个公式: =IF(A3="","",WORKDAY(A3,INT

我想在某个日期增加营业时间。问题是当我在假期设置开始日期时。 例如:我设置

Column A3 - Start date - 2020-07-09 8:01
Column B3 - Add hours: 2
Column E2 - Start hour: 8:00
Column F2 - End hour: 17:30
Column G2:G - Holiday: 9/7/2020
我用了这个公式:

=IF(A3="","",WORKDAY(A3,INT(B3/9.5)+IF(TIME(HOUR(A3),MINUTE(A3),SECOND(A3))+TIME MOD(B3,9.5),MOD(MOD(B3,9.5),1)*60,0)>$F$2,1,0),$G$2:$G)+IF(TIME(HOUR(A3),MINUTE(A3),SECOND(A3))+TIME(MOD(B3,9.5),MOD(MOD(B3,9.5),1)*60,0)>$F$2,$E$2+TIME(HOUR(A3),MINUTE(A3),SECOND(A3))+(TIME(MOD(B3,9.5),MOD(MOD(B3,9.5),1)*60,0)-$F$2,TIME(HOUR(A3),MINUTE(A3),SECOND(A3))+TIME(MOD(B3,9.5),MOD(MOD(B3,9.5),1)*60,0)))
结果是不正确的。它告诉我:
2020-7-9 10:01
,但它应该是
2020-7-10:01

更新: 很少有案例是好的:
a) 开始2020-07-09 8:01->增加1小时->结果-2020-07-10 9:01
b) 开始2020-07-09 7:00->增加1小时->结果-2020-07-10 9:00
c) 开始2020-07-09 17:31->增加1小时->结果-2020-07-10 9:00
d) 开始2020-07-09 00:00->添加1小时->结果-2020-07-10 9:00

还有:
a) 开始2020-07-10 8:01->增加1小时->结果-2020-07-10 9:01
a) 开始2020-07-10 20:22->增加1小时->结果-2020-07-13 9:00

有什么帮助吗

更新:

我认为问题在于,你的等式的前半部分只涉及天数/日期,后半部分涉及小时

你方程的这一部分:

WORKDAY(A3,INT(B3/9.5)+IF(TIME(HOUR(A3),MINUTE(A3),SECOND(A3))+TIME(MOD(B3,9.5),MOD(MOD(B3,9.5),1)*60,0)> $F$2,1,0),$G$2:$G)
返回日期“2020-07-09”(将其格式化为datetime,您将看到“2020-07-09 00:00”),等式的后半部分将其加上10多个小时,给出日期时间值“2020-07-09 10:01”

我假设您希望在工作日的开始时间上午8:00增加10个工作小时,这将延续到下一个工作日

更新:这是一个样本表,可以测试在日期中添加小时数。

将此作为新答案添加。这是非常具体的逻辑要求的原始问题。 示例工作地点如下:

主要公式如下:

=if(or(
    weekday(A6,2)>5,
    iferror(match(INT(A6),$H$1:$H12,0),FALSE)),
      workday(A6,
              INT(1 + int(B6/9.5) ),
              Sheet2New!Holidays)
        + (8 + mod(B6,9.5))/24 ,
      workday(A6,
              INT(0 + int(B6/9.5) + if((if(D6/24<$B$2,8,D6) + mod(B6,9.5))-$D$3>0,1,0)),
              Sheet2New!Holidays)

        + if(round(D6/24,4)<=$B$2,
            8+mod(B6,9.5),
            if(round((D6 + mod(B6,9.5))/24,4)>=$B$3,
              if(round(D6/24,4)>=$B$3, 
                8 + mod(B6,9.5),
                8 + mod(B6,9.5)-($C$3*24-D6)),
            D6 + mod(B6,9.5)))  /24)
=if(或(
工作日(A6,2)>5,
iferror(匹配(整数(A6),$H$1:$H12,0),假)),
工作日(A6,
INT(1+INT(B6/9.5)),
Sheet2New!假日)
+(8+mod(B6,9.5))/24,
工作日(A6,
INT(0+INT(B6/9.5)+if((if(D6/240,1,0)),
Sheet2New!假日)
+如果(四舍五入(D6/24,4)=B$3,
如果(四舍五入(D6/24,4)>=$B$3,
8+模(B6,9.5),
8+mod(B6,9.5)-($C$3*24-D6)),
D6+mod(B6,9.5))/24)
它可能需要大量的清理,但会留下来,直到看看它是否适合你

它基本上使用工作日来计算未来的日期,基于开始日期/时间和增加的小时数。公式的第一部分侧重于正确确定新日期,第二部分侧重于确定新的开始时间

逻辑规则包括:

工作时间限制为08:00至17:30,或每天9.5小时

如果开始日期是假日,则跳到下一个工作日08:00,加上指定的小时数,每天最多保持9.5小时,且仅为工作日

如果开始时间在08:00之前,请提前到08:00,再加上小时

如果开始时间在17:30之后,请提前到下一个工作日的08:00,再加上几个小时

如果增加的小时数将导致超过17:30,则将剩余小时数添加到下一个工作日的08:00

如果测试结果合格,请告诉我


更新:修改了公式,以检查是否在周末开始。如果是,则将其视为在假日开始。

此函数是什么?“+TIME MOD(B3,9.5)“从未见过的TIME MOD()。是否有名称中带有空格的函数?TIME-将提供的小时、分钟和秒转换为TIME and MOD()-返回模运算符的结果,即除法运算后的余数。名称中没有空格。因此,您实际上打算将此“+时间(MOD(B3,9.5))?可能您遗漏了几个字符?我有一个括号,上面有一个错误…我没有看到。但这仍然不是问题;(您提供的公式出现了公式解析错误,WORKDAY应该有3个值,而不是4个值。您能解决这个问题吗?没错,因为我不知道如何解决这个问题。您能给我写一个正确的公式吗?我甚至想添加1小时,但当我将开始日期设置为与假日中的日期相同时,我应该显示下一个工作日+这个h。)我们的。我看到一个主要问题。如果你将开始日期设置为假日或周末,WORKDAY似乎不会跳过它,因此你可能需要很多逻辑来检查和解决这些可能性。否则,这个公式似乎做了一些正确的计算:
=WORKDAY(A3,B3/24+TIMEVALUE(A3)/24,G2:G)+TIMEVALUE(A3)
由于WORKDAY忽略小时数,因此我们将初始开始时间加上工作小时数(两者均除以24)以获得未来的天数。然后我们将初始开始时间加回去以获得最终的日期和时间。如果我们想考虑每天只允许8个工作小时,那么增加10小时等于增加1.25天,那么d需要一些额外的逻辑。那么你一天的开始时间是早上8:00还是其他什么?让我们知道你是否需要这样的时间。但它仍然不起作用。关于开始日期,很少有案例,答案应该是这样的:a)开始2020-07-09 8:01->增加小时数-1->结果-2020-07-10 9:01 b)开始2020-07-09 7:00->增加小时数-1->结果-2020-07-10 9:00 c)开始2020-07-09 17:31->增加1小时->结果2020-07-10 9:00 d)开始2020-07-09 00:00->增加1小时->结果2020-07-10 9:00假期仍在2020-07-09。工作时间在8:00-17:30之间。我发现几乎是好的解决方案,但不是真的…有一个错误(我在那里写了一个问题).差不多了!但我试着设置了一个开始日期2020-07-12 10:00,再加上1小时,结果是2020-07-12 11:00。应该是2020-07-13 9:00。所以问题也在于开始日期是周末。你能纠正吗?修复了。只需添加一个简单的星期几检查,并将日期视为从假日开始。T非常感谢!!!你太棒了!看起来一切都很顺利!我为开始时不够精确而道歉。感谢你抽出时间:)作为询问原始问题的人