Table of contents
今天的博文是关于在谷歌表格中计算两个日期之间的差异。 你会看到很多DATEDIF公式来计算日、月和年,并学习NETWORKDAYS是如何用来只计算工作日的,即使你的假期是基于自定义时间表。
很多电子表格的用户发现日期的处理很混乱,甚至非常困难。 但信不信由你,有几个方便而直接的函数可以达到这个目的。 DATEDIF和NETWORKDAYS就是其中的两个。
谷歌表格中的DATEDIF函数
就像函数一样,它们的名字暗示着动作。 DATEDIF也是如此。 它必须被理解为 日期差异 ,而不是 日期,如果 ,它代表着 日期差异 因此,谷歌表的DATEDIF计算两个日期之间的日期差。
让我们把它分解成碎片。 该函数需要三个参数。
=DATEDIF(start_date, end_date, unit)- 开始日期 - 用作起点的日期,必须是下列之一。
- 一个日期本身在双引号中。 "8/13/2020"
- 一个对有日期的单元格的引用。 A2
- 一个返回日期的公式。 日期(2020, 8, 13)
- 一个代表特定日期的数字,并且可以被Google Sheets解释为日期,例如。 44056 代表 2020年8月13日 .
- 结束日期 - 一个用作端点的日期。 它的格式必须与 开始日期 .
- 单位 - 这里有一个你可以使用的单位的完整列表。
- "D" - (简称为 天 ) 返回两个日期之间的天数。
- "M" - 月)两个日期之间的整月数。
- "Y" - 年)的整数年。
- "MD" - (天数无视月数)减去整月后的天数。
- "YD" - 天数无视年数)减去整年后的天数。
- "YM" - 月忽略年)减去整年后的完整月数。
注意:所有单位都必须按照上面的方式放入公式中--用双引号。
现在让我们把所有这些部分拼在一起,看看DATEDIF公式是如何在谷歌表格中工作的。
在谷歌表格中计算两个日期之间的天数
例1.计算所有天数
我有一个小表来跟踪一些订单。 所有的订单都在8月上半月发货了----。 发货日期 - 还有一个大概的交货日期 到期日 .
我打算计算天数------。 "D" - 以下是我应该使用的公式。
=datedif(b2, c2, "d")
我把DATEDIF公式输入到D2,然后把它复制到下一列,应用到其他行。
提示:你总是可以用ARRAYFORMULA的单个公式一次性计算整个列。
=ArrayFormula(DATEDIF(B2:B13, C2:C13, "D") )
例2.计算天数,忽略月数
想象一下,两个日期之间有几个月的时间。
你如何只计算天数,就像它们属于同一个月一样? 没错:忽略已经过去的整月。 当你使用DATEDIF时,DATEDIF会自动计算。 "MD" 单位。
=datedif(a2, b2, "md")
该函数减去已过去的月份,并计算剩余的天数。
例3.计算天数,忽略年份
另一个单位--"YD"--将在日期间隔超过一年的情况下提供帮助。
=datedif(a2, b2, "yd")
该公式将首先减去年份,然后计算剩余天数,就像它们属于同一年一样。
在谷歌表格中计算工作天数
有一种特殊情况,当你需要在谷歌表格中只计算工作日时。 DATEDIF公式在这里不会有太大帮助。 而且我相信你会同意,手动减去周末并不是最优雅的选择。
幸运的是,谷歌表有几个不那么神奇的法术来解决这个问题:)
例1.NETWORKDAYS函数
第一个被称为NETWORKDAYS,这个函数计算两个日期之间的工作日数,不包括周末(周六和周日),如果有必要,甚至包括节假日。
=NETWORKDAYS(start_date, end_date, [节假日])- 开始日期 - 作为起点的日期。 需要。
注意:如果该日期不是假日,则算作工作日。
- 结束日期 - 一个用作端点的日期。 需要。
注意:如果该日期不是假日,则算作工作日。
- 假期 - 这个是可选的,当你需要指出特定的假期时。 它必须是一个日期范围或代表日期的数字。
为了说明它是如何工作的,我将添加一个发生在发货日期和到期日期之间的假期列表。
所以,B列是我的开始日期,C列是结束日期。 E列的日期是要考虑的假期。 以下是公式的样子。
=networkdays(b2, c2, $e$2:$e$4)
提示:如果你要将公式复制到其他单元格,请使用绝对的单元格引用,以避免错误或不正确的结果。 或者考虑建立一个数组公式来代替。
你是否注意到,与DATEDIF公式相比,天数减少了? 因为现在该函数自动减去了所有周六、周日和两个发生在周五和周一的假期。
注意:与谷歌表格中的DATEDIF不同,NETWORKDAYS计算的是 开始日期 和 结束日 因此,D7返回的是 1 .
例2.谷歌表的NETWORKDAYS.INTL
如果你有一个自定义的周末时间表,你会从另一个功能中受益:NETWORKDAYS.INTL.它可以让你根据个人设定的周末来计算谷歌表的工作日。
=NETWORKDAYS.INTL(start_date, end_date, [周末], [假期])- 开始日期 - 作为起点的日期。 需要。
- 结束日期 - 一个用作端点的日期。 需要。
注:谷歌表格中的NETWORKDAYS.INTL也计算在内。 开始日期 和 结束日 除非是节假日,否则都是工作日。
- 周末 - 如果省略,周六和周日将被视为周末。 但你可以用两种方法改变这一点。
- 面具 .
提示:当你的休息日分散在一周内时,这种方式是完美的。
掩码是一个由1和0组成的七位数图案,1代表周末,0代表工作日。 图案中的第一个数字总是星期一,最后一个数字是星期天。
比如说。 "1100110" 意味着你在星期三、星期四、星期五和星期六工作。
注意:掩码必须放在双引号中。
- 数字 .
使用一位数的数字(1-7),表示一对集合周末。
数量 周末 1 周六、周日 2 周日、周一 3 周一、周二 4 星期二、星期三 5 周三、周四 6 周四、周五 7 周五、周六 或者用两位数的数字(11-17)表示一周内休息一天的工作。
数量 周末日 11 星期日 12 星期一 13 星期二 14 星期三 15 星期四 16 星期五 17 星期六
- 面具 .
- 假期 - 它也是可选的,用于指定假期。
这个函数可能看起来很复杂,因为有那么多的数字,但我鼓励你试一试。
首先,只要对你的休息日有一个清晰的认识。 让我们把它变成 星期日 和 星期一 然后,决定如何表示你的周末。
如果你用口罩,就会像这样------。 1000001 :
=networkdays.intl(b2, c2, "1000001")
但由于我连续有两个周末,我可以使用上述表格中的一个数字。 2 在我的情况下。
=networkdays.intl(b2, c2, 2)
然后简单地添加最后一个参数--参考E列的假期,公式就准备好了。
=networkdays.intl(b2, c2, 2, $e$2:$e$4)
谷歌表格和月度的日期差异
有时,月比天更重要。 如果这对你来说是真的,而且你更喜欢以月而不是以天为单位获得日期差,那么就让谷歌表的DATEDIF来完成这项工作。
例1.两个日期之间的整月数
演习是一样的: 开始日期 首先进行,其次是 结束日期 和 "M" - 矗立了几个月的--作为最后的论据。
=datedif(a2, b2, "m")
提示:不要忘记ARRAUFORMULA函数,它可以帮助你一次性计算所有行的月份。
=arrayformula(dateif(a2:a13, b2:b13, "m"))
例2.无视年的月数
你可能不需要在开始和结束日期之间的所有年份中计算月数。 而DATEDIF让你做到这一点。
只要使用 "YM" 单位,公式会先减去整数年,然后计算日期之间的月数。
=datedif(a2, b2, "ym")
在谷歌表格中计算两个日期之间的年份
最后(但不是最不重要的)要告诉你的是,谷歌表的DATEDIF是如何计算日期的年差的。
我将根据夫妇的结婚日期和今天的日期来计算他们结婚的年数。
正如你可能已经猜到的,我将使用 "Y" 节目组为其提供的服务。
=datedif(a2, b2, "y")
所有这些DATEDIF公式都是在谷歌表格中计算两个日期之间的日、月、年时首先要尝试的。
如果你的案件不能通过这些解决,或者你有任何问题,我鼓励你在下面的评论部分与我们分享。