用于计算可以跨越两天的时间的持续时间的公式


0

A:24小时格式的开始时间(使用公式=NOW()并用Ctrl+ SHIFT+ 锁定;
B:24小时格式的结束时间(输入与列相同A
C:持续时间,格式为[mm],使用公式=B1-A1

如果列中的数据B包括第二天发生的时间,如何计算持续时间?


实际工作表:

实际工作的屏幕截图


您需要在Excel中学习日期和时间格式。C列的公式字面上是= B1-A1,但为了使其正常工作,前面的单元格必须具有有效的日期/时间格式。它也处理午夜就好了。
泰森1819年

C列中的公式确实= b1-a1,格式为[mm],我忘了提到我使用函数“CTRL + SHIFT +;” 锁定时间,我现在得到的结果是持续时间为负( - )并且没有计算第二天。
Saphiraz

Answers:


2

Ctrl+ Shift+ ;只是将当前时间放入单元格而没有日期戳,正如@Akina在答案中指出的那样,它没有锁定任何内容。

NOW()为单元格添加日期戳以及时间。要查看该内容,请单击未格式化的空单元格或General格式和类型的任何单元格=NOW()。在打字的时候我得到了21/08/2018 11:25

如果你放入=NOW()细胞A1=NOW()+TIME(23,0,0)进入细胞B1,如果你放入=B1-A1细胞C1并格式化细胞,Time你就会得到23:00:00

如果您在没有日期戳的情况下放置时间,则需要使用IF()公式来确定第二次是否低于第一次(时间帧超过午夜)。以下将计算单元格B1和单元格中的时间之间的时间差,A1无论结束时间是否超过午夜。它也可以使用或不使用日期戳,因为忽略了日期戳。

=IF(B1<A1,MOD(B1-A1,1),B1-A1)

公式的解释

=IF(B1<A1,...)

是时候B1过了午夜?如果是,则执行下一部分

MOD(B1-A1,1)

MOD(number,divisor)返回一个数字后余数除以除数。细胞B1减细胞A1为负值,如在细胞的时间B1是午夜,并擅长在大多数情况下,不喜欢消极时间值,因此它会给#####没有MOD()。在MOD()各种各样的说出来。

MOD()公式的替代方案是使用

TIME(23,59,59)-TIME(HOUR(A1),MINUTE(A1),SECOND(A1))+TIME(0,0,1)+B1

这是23:59:59 minus time in cell A1 plus 1 second plus time in cell B1

这是最后一位,B1-A1)的是最后一部分IF(),其中如果时间在细胞B1不是过了午夜。


如果其中一个源值是“固定的”(并且不包含日期部分,它只是时间)而另一个不是(并且包含两个日期),那么这个公式可能(似乎会 - 但它是树懒来检查)给出错误的结果和时间部分)。
Akina

我不明白你在说什么@Akina。我刚检查过,实际上,=IF(B1<A1,MOD(B1-A1,1),B1-A1)无论是否有日期戳都可以。
克里斯罗杰斯

将当前时间(按下Ctrl-Alt-;)插入A1单元格。将curent datetime(按公式=NOW())插入B1单元格。检查结果。
Akina

我按照你的建议做了,尽管它是Ctrl + Shift + ;进入单元格A1,它对我有用。
克里斯罗杰斯

2
您不应该需要IF测试。MOD应该处理差异,无论它是否通过午夜。
fixer1234

2

可能最优雅和最简单的解决方案是此评论中 fixer1234提到的答案中的一个:

=MOD(B1-A1,1)

请注意,它假定两个值仅为时间值(或者要截断日期部分),即每个值小于1,并且持续时间小于24小时。

说明:

这是因为对于序列日期时间值,1对应于24小时,而仅时间值是小于1的日期时间值。因此:

  • 如果B1 >= A1那么MOD(B1-A1,1)B1-A1按预期
  • 如果B1 < A1那么MOD(B1-A1,1)等于1-(A1-B1)(从MOD(-n,m)=m-MOD(n,m))给出正确的“补充”持续时间


另一种解决方案(判断它是否更简单/更优雅;-))是:

=(B1<A1)+B1-A1

说明:

这是有效的,因为在算术运算中使用时,TRUE值会被隐式强制转换为a 1FALSE0。从而:

  • 如果B1 >= A1那么(B1<A1)0并且公式变为B1-A1
  • 如果B1 < A1那么(B1<A1)1和公式相当于1-(A1-B1)

请注意,即使两个值都是日期时间并且相隔超过24小时,此公式也能正常工作这是为第一个公式的情况下,所以这第二个公式是一个更有用/普通之一。


我不确定你的最后一段是什么意思。如果我们假设持续时间<24小时 - 即,(开始时间)≤(结束时间)<(开始时间+24小时) - 并且您不担心正确处理两个单元格都为真(完整)的情况datetime,然后=MOD(B1-A1, 1)似乎工作得相当好。而且=IF(AND(A2>=1,B2>=A2), B2-A2, IF(AND(A2>=0,A2<1,B2>=0,B2<1), MOD(B2-A2,1), "Error"))似乎处理所有情况良好。
斯科特

@Scott我只是在等待有人接受;-)我特别提到了Akina和随后的帖子的评论。写完后,我意识到该段在技术上稍微不准确。我需要补充的是,“如果没有其他假设”和“总是产生正确的差异”。你是对的,如果你只想截断一个完整的日期时间值,那么MOD公式将起作用。(加上错误公式也会通过捕获它来处理这种情况。)我会删除它,因为它是OT /不准确。
robinCTS

-2

如果B列中的数据包含第二天的时间,我该如何计算持续时间?

=1 + B1 - A1

格式化为时间将显示正确的结果。如果B1> A1,则resilt当然包含非零日期部分,但由于单元格格式而未显示。

如果要在某些时间计算中使用此时间值,请使用更复​​杂的公式

=B1-A1-INT(B1-A1)

PS。

并用CTRL + SHIFT +锁定;

这个组合什么都没锁 它完全用当前时间值替换单元格内容。


好吧,它只是将其更改为时间值,但它确实会阻止时间自动更改,因为我使用的是volatile volatile(now())。有没有办法锁定单元格数据?
Saphiraz

@Saphiraz我不明白你。当任何源单元格包含NOW()并且其时间点未固定时,С中的结果(据我所知)无关紧要。当两个源单元格被Ctrl-Shift-;公式固定时,会得到您需要的结果。PS。寻找=B1-INT(B1)-A1+INT(A1)-INT(B1-A1)...
Akina

请检查样本数据。
Saphiraz

1
请查看示例数据我可以查看截图吗?使用参考结果将格式化(固定长度)的样本数据(可以轻松地复制粘贴到Excel工作表)添加到您的问题(如果需要,指定源范围)中。对于日期时间 - 键入数字并指定列格式。
Akina

-2

要在Minutes两者之间找到差异,24Hrs DateTime Stamps您可以使用其中任何一个:

=Int((A2-A1)*24*60)

要么

=int((A2-A1)*1440)

要么

=ROUNDUP((A2-A1)*1440,2)

注意,公式单元格必须具有General格式。


1
用CTRL + SHIFT +锁定; 值中没有日期部分。如果超过午夜,结果将是负面的。
Akina

我录的使用两个值CTRL+SHIFT+;2:03 PM2:11 PM与应用=INT((M8-L8)*1440)&" Mnts"得到了答案8 Mnts
Rajesh S

,,续。或者你也可以使用=ROUNDUP((M8-L8)*1440,2)&" Mnts"
Rajesh S

得到答案8 Mnts交换源值 - 结果是1432?
Akina

如果单元格中的时间A2已经过了午夜,则答案中的公式不起作用,因为@Akina指出
克里斯罗杰斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.