【问题标题】:How to add work hours to a date with time?如何将工作时间添加到有时间的日期?
【发布时间】:2020-07-12 20:07:01
【问题描述】:

我正在尝试将营业时间添加到某个日期。问题是当我在假期设置开始日期时。 例如:我设置

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 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

有什么帮助吗?

更新: https://i.stack.imgur.com/Lq6bs.png

【问题讨论】:

  • 这是什么功能? “+TIME MOD(B3,9.5)”从未见过 TIME MOD()。有名称中带空格的函数吗?
  • TIME - 将提供的小时、分钟和秒转换为时间和 MOD() - 返回模运算符的结果,即除法运算后的余数。而且名称中没有空格。
  • 所以你实际上是想把这个"+TIME(MOD(B3,9.5)) ?也许你错过了几个字符?
  • 我有一个括号,上面有一个错误......我没有看到那个。但这仍然不是问题;(
  • 你提供的公式给出了一个公式解析错误,WORKDAY应该有3个值而不是4个。你能解决这个问题吗?

标签: datetime google-sheets google-sheets-formula


【解决方案1】:

我认为问题在于等式的前半部分只处理日期/日期,而后半部分处理小时。

所以等式的这一部分:

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”(将其格式化为日期时间,您会看到“2020-07-09 00:00”),等式的后半部分会增加 10 多个小时,给出日期时间值“2020-07-09 10:01”。

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

更新:这是一个样本表,可以在其中测试将小时数添加到日期。 https://docs.google.com/spreadsheets/d/1ceCLUhjAm_4nj18K7GhXq6hz_z42PxyQC3PDpyRID6I/edit?usp=sharing

【讨论】:

  • 没错,有一个问题,因为我不知道该怎么做。你能给我写一个正确的公式吗?我什至想添加 1 小时,但是当我将开始日期设置为与假期中的日期相同时,我应该显示下一个工作日 + 这个小时。
  • 我看到了一个主要问题。如果您将开始日期设置为假期或周末,WORKDAY 似乎不会跳过它,因此您可能需要大量逻辑来检查和解决这些可能性。否则,这个公式似乎做了一些正确的数学运算:=WORKDAY(A3,B3/24 + TIMEVALUE(A3)/24,G2:G) + TIMEVALUE(A3) 由于 WORKDAY 忽略了小时数,我们将初始开始时间加上工作小时数,再除以 24,得到未来的天数。然后我们加回初始开始时间以获得最终日期和时间。
  • 如果我们要考虑每天只允许 8 个工作小时,因此增加 10 小时等于增加 1.25 天,那么这将需要一些额外的逻辑。你一天的开始是早上 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之间。
  • 我找到了几乎很好的分辨率,但不是真的...有一个错误(我在那里写了一个问题)。 stackoverflow.com/questions/57711191/…
【解决方案2】:

将此添加为新答案。它对原始问题的逻辑要求非常具体。 示例工作组在这里: https://docs.google.com/spreadsheets/d/1kmXE6QlqRLFNS9rKNwiqTX-blgJKjj8w0SayJVeQdZo/edit?usp=sharing

主要公式如下:

=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)

它可能需要大量的清理工作,但在查看它是否适合你之后才会这样做。

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

逻辑规则包括:

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

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

如果开始时间早于 08:00,则向前跳至 08:00,再加上几个小时。

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

如果添加的小时数会超过 17:30,请将剩余小时数添加到下一个工作日的 08:00。

如果测试没问题,请告诉我。

更新:修改公式以检查是否从周末开始。如果是这样,就如同从假期开始一样对待。

【讨论】:

  • 快完成了!但是我尝试设置一个开始日期2020-07-12 10:00,加上1小时,结果是2020-07-12 11:00。应该是 2020-07-13 9:00。所以问题也在于开始日期是周末的日期。你也能纠正一下吗?
  • 已修复。刚刚添加了一个简单的星期几检查,并将日期视为从假期开始。
  • 非常感谢!!!你太棒了!看起来一切正常!我为一开始缺乏精确性而道歉。谢谢你的时间:)
  • 作为提出原始问题的人,您可以在此处将任何答案标记为对您有帮助或达到了您的目标,因此搜索类似问题的其他人可以从有用的答案中受益。见这里:stackoverflow.com/help/someone-answers
  • 你能不能也用这个公式做一个数组公式?或者我需要打开新请求?因为当我将它更改为数组时它不起作用:/
猜你喜欢
  • 2015-10-13
  • 2015-09-21
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 2017-04-10
  • 2011-01-10
  • 1970-01-01
  • 2016-02-19
相关资源
最近更新 更多