我有一个大致如下的Google Spreadsheet:

 Date        | Start time  | End time    | Minutes
 ------------+-------------+-------------+-----------
 1/11/2012   | 11:39       | 12:41       | ?!
 ------------+-------------+-------------+-----------
             |             |             | 


现在,如果我手动填写一天两次之间的分钟数。是否有一种简单的方法来计算时间增量并让电子表格为我完成?

#1 楼

Google添加了一种新的数字格式,称为“持续时间”。首先将开始和结束字段的格式设置为Format -> Number -> DateTimeFormat -> Number -> Time,将计算字段的格式设置为Format -> Number -> Duration
完成后,您可以减去这些字段以得到Stefano Palazzo在其答案中指出的差异。

评论


微小的添加,开始和结束字段也可以是DateTime(格式>数字>日期时间),这也可以使用。

–贝坦·库尔特(Beytan Kurt)
6月14日16:29

@BeytanKurt那不是我那里吗?

–雅各布·霍尔斯(Jacob Hulse)
10月12日19:18

似乎答案已被编辑为包括我所说的@jacob

–贝坦·库尔特(Beytan Kurt)
10月13日14:54

@BeytanKurt是的,在您指出之后,是我的!大声笑

–雅各布·霍尔斯(Jacob Hulse)
10月13日22:09

#2 楼

是的,如果您的时间字段格式正确(单击格式→数字→时间),则可以添加和减去时间:

=C2-B2





21:58:00-20:44:00 = 1:14:00


这将使您的时间增量为HH:MM:SS。如果要计算分钟数,则可以在该字段上使用Hour()Minute()Second()函数:

=(Hour(D2) * 60) + Minute(D2) + (Second(D2) / 60)


当然,秒,时区更改或事件发生的时间超过24小时,您仍然必须手动调整结果。

警告

如果某个事件持续到午夜,例如从23:50到00:10,这将显示为负值时间!

为使这些事件得到“正确的处理”,您可以放置​​“ 24:10”或将事件分为两个。

更好的方法

尽管输入数据有些困难,但最可靠的方法是将beinning和end字段标记为“ Date Time”,将delta字段标记为“ Hours”,如下所示:

Beginning          End                  Delta
8/1/2013 0:00:00   8/2/2013 12:30:00    36:30:00


评论


这似乎不再起作用。我认为您需要选择格式>数字>小时(与时间)。当我尝试减去简单的时差时,我得到一个非常奇数的十进制数。

–伊利亚·林恩
13年7月5日在17:27



@ElijahLynn这个奇数是天数。将时间乘以24和60可得出分钟数,

–雅各布·扬·图恩斯特拉(Jacob Jan Tuinstra)
13年7月21日在12:36

如果某人想在一个单元格中获取日期和时间,则可以通过加法来合并:A1 + B1。

–丹尼斯·库特鲁贝(Denis Kutlubay)
16年8月3日,9:02

“警告”很重要。我没有看到其他要声明的地方,但是正在寻找它。对我来说,这不是警告,而是处理两次之间差异的重要部分。没有先声明其顺序是很自然的。

–德克·舒马赫(Dirk Schumacher)
3月28日8:46

#3 楼

如果在D2中添加以下公式,则分钟将自动计算:

公式

=ARRAYFORMULA(IF(ISBLANK(B2:B)=FALSE,((C2:C-B2:B)*24*60),""))


解释了>时间之间的差异(以十进制格式表示)以天为单位。因此,将时间乘以24乘以60将产生分钟。

备注

有一个先决条件:D列需要格式化为'normal'。

示例

查看我创建的示例文件:增量时间

#4 楼

我做了很多实验。这是在Google Spreadsheets中计算时间增量的最简单方法。格式化包含公式的单元格,如下所示:



Format> Number> More Formats>更多日期和时间格式,删除“ second”和:。然后,格式化“结束时间”和“开始时间”像这样:h:mm am/pm


使用公式=abs(end time - start time)。这为您提供了绝对值,因此不会出现负的时间值。

#5 楼

如此简单:在Excel论坛中查看以下答案:


B2: 23:00
C2: 1:37
D2: =C2-B2+(B2>C2)


为什么它起作用,时间只是一天的一小部分,比较B2> C2如果添加true 1天(24小时),则返回True(1)或False(0)。


评论


我正要添加此答案,但是注意到它已经添加了。做得好。这绝对是解决Stefano提出的问题的最简单方法。同样重要的是要指出D2单元格的格式必须为[m]:必须选择D2单元格,然后单击“格式”>“数字”>“更多格式”>“自定义数字格式”,然后添加[m]并单击“应用”。

– Yuri Sucupira
19/12/27在4:44

#6 楼

为了获得更强大的解决方案,我们使用了自定义函数。

1。添加自定义功能

使用脚本编辑器(按照https://developers.google.com/apps-script/execution_custom_functions中的说明进行操作)-写道:

function toEpoch (indate) {
  return indate.getTime();
}


2。添加公式器

然后在单元格中输入:

=(toEpoch(C2)-toEpoch(B2)) / 60*1000


将历时毫秒的差转换为分钟。

评论


...我这样做是为了确保将其转换并转换为秒(从毫秒):function toEpoch(data){return new Date(data)/ 1000; }

–user1278519
17-4-23在18:06



#7 楼

如果您希望以天为单位测量时间增量,请使用

=DAYS(end_date, start_date)


评论


确实如此。但是,我来这里的目的是找出几天之间的差异(后来在其他地方找到它时又回来给出答案),这使我得出这样的假设:我的答案可以使相同情况下的其他人受益。由于这是一个相关主题,因此我认为不值得提出一个新问题,尤其是因为标题未指定度量单位。但这只是我的理由。你怎么看?

– e18r
17-10-7在20:37



@pnuts如果您找到了有用的答案,但是稍微超出了问题的范围,则也可以只编辑问题(在这种情况下,是几分钟,几小时或几天,或者其他任何内容)。我只是一个人,这个问题有100,000次浏览。

– Stefano Palazzo
17-10-9在15:07



#8 楼

您也可以尝试使用TIMEVALUE()

在上述情况下,解决方案是:

(TIMEVALUE(End Time) - TIMEVALUE(Start Time))*24*60将为您提供MINUTES的时差。

评论


欢迎Sujeeth!好的答案,我添加了一些格式使其更易于阅读。

– Vidar S. Ramdal
18-10-16在13:18

#9 楼

免责声明:我要发布的答案不能完全回答提问者的问题,因为这是在Google上获得第一个结果时需要的答案,我想帮助下一个与我有相同问题的人。 br />
这可能不是最漂亮的公式,但结果却是我能管理的最漂亮的公式。假设F2单元格包含日期,这是我用来阐明今天和前一阵子之间的区别的Google表格公式:

=IF(DATEDIF(F2,TODAY(),"Y")>0,DATEDIF(F2,TODAY(),"Y")&" year"&IF(DATEDIF(F2,TODAY(),"Y")=1,", ","s, ")&DATEDIF(F2,TODAY(),"YM")&" month"&IF(DATEDIF(F2,TODAY(),"YM")=1,", ","s, "),IF(DATEDIF(F2,TODAY(),"YM")>0,DATEDIF(F2,TODAY(),"YM")&" month"&IF(DATEDIF(F2,TODAY(),"YM")=1,", ","s, "),""))&DATEDIF(F2,TODAY(),"MD")&" day"&IF(DATEDIF(F2,TODAY(),"MD")=1,"","s")


假设今天是2020-03-09,此公式的示例结果如下:

column F   | column G
--------------------------------------
2020-02-14 | 24 days
2019-10-08 | 5 months, 1 day
2019-06-14 | 8 months, 24 days
2019-04-05 | 11 months, 4 days
2019-03-09 | 1 year, 0 months, 0 days
2019-02-01 | 1 year, 1 month, 8 days
2018-12-07 | 1 year, 3 months, 2 days
2018-03-04 | 2 years, 0 months, 5 days
2018-01-09 | 2 years, 2 months, 0 days


我确保:


在所有单位上均已正确处理
如果全部显示0
,则显示最高幅值的时间单位被隐藏
,即使较高幅值的时间单位大于0,即使显示0,也将隐藏最高幅值的时间单位。

如果希望公式末尾说“前”,可以在公式末尾添加&" ago"

#10 楼

在Google表格中,我使用了以下公式

=Round((hour(A2-A1)*60 + minute(A2-A1))/60,2)


给我十进制小时数的差异。

#11 楼

我使用这个公式:

=HOUR(C2-B2)*60+MINUTE(C2-B2)


然后

Format -> Number -> More Formats -> Custom number format -> #,##0


#12 楼

=(C2-B1)*1440然后将格式设置为“纯文本”。

#13 楼

对于我的个人应用程序:

StartTime (columnA)| EndTime(Column B)| Date (Column C)


这对我有用:=if(B4-A4<0,(B4+C4+1)-(A4+C4),B4-A4);将单元格格式化为Format \ Time \ Duration。

对于真实条件:公式受Stefano Palazzo的评论启发。

评论


ps。即使StopTime移到了第二天,日期也与StartTime关联,这就是为什么我将+1添加到EndTime的日期。如果您的EndTime滚动超过一天,则+1显然将不再起作用。

– Bob K
17年1月10日在4:41



#14 楼

我同意时间增量是以天为单位表示的,因此要回到分钟数,您应该将差值乘以1440,即24 x 60。在Google文档电子表格中获取当前时间的另一种简单方法是在单元格中输入CONTROL :。您可以将其用于“开始时间”和“结束时间”单元格。

如果需要在单元格中输入当前日期,则可以通过CONTROL来实现;

评论


感谢您的分享,但这并不是问题的答案。在我们的帮助中心中了解更多内容。欢迎使用Web应用程序!

–雅各布·扬·图恩斯特拉(Jacob Jan Tuinstra)
13年11月6日在6:13