你可以使用日期与时间公式来获取日期与时间相关数据,例如传回年月日、时间、指定工作日等等…
以下列出所有支持的公式。公式请一律用大写表示!
公式 | 描述 |
---|---|
TODAY() | 传回目前日期。如需做为每日公式重算的参照字段,建议使用 TODAYTZ() 代替 TODAY() |
TODAYTZ() | 传回根据帐号设置中公司所在时区的目前日期 |
NOW() | 传回目前日期和时间 |
NOWTZ() | 传回根据帐号设置中公司所在时区的目前日期和时间 |
EDATE(start_date, months) | 传回代表日期的连续数字,为指定时间(start_date)之前或之后几个月份(months)该日期的数字 |
EOMONTH(start_date, months) | 传回代表指定日期(start_date)之前或之后月份(months)最后一天日期的连续数字 |
YEAR() | 传回日期字段的年份 |
MONTH() | 传回日期字段的月份 |
DAY() | 传回日期字段的日 |
DATE(year,month,day) | 结合三个参照数字字段的值,回传一个日期。为避免混淆,年份的字段请使用四位数的值 |
WEEKDAY() | 传回一周内的第几天,以数字显示从第 1 天(星期天)到第 7 天(星期六) |
WORKDAY(start_date,days,["holidays"], [makeup_workdays]) | 会传回代表日期 (起始日期) 不包含周末及指定假日(以及指定哪几天是工作日)之前或之后指定工作日数的日期。查看详细内容 |
WORKDAY.INTL(start_date,days,[weekend_no],["holidays"], [makeup_workdays]) | 使用参数指出哪几天和多少天是周末(及指定哪几天是工作日),以传回代表日期 (起始日期) 之前或之后指定工作日数的日期。查看详细内容 |
NETWORKDAYS(start_date,end_date,["holidays"], [makeup_workdays])) | 会传回 start_date 与 end_date 间不包含假日(周末、指定假日)以及指定哪几天是工作日的全部工作日数。查看详细内容 |
NETWORKDAYS.INTL(start_date,end_date,[weekend_no],["holidays"], [makeup_workdays]) | 使用参数指出哪几天和多少天是周末(及指定哪几天是工作日),以传回两个日期之间的所有工作日数。查看详细内容 |
ISOWEEKNUM(date) | 计算该日期为该年的第几周,星期一为该周第一天。 |
WEEKNUM(serial_number,[return_type]) | 计算该日期为该年的第几周,每周起始日可以自订。查看详细内容 |
DATEVALUE(date_text, date_format) | 套用在日期(时间)字段,将参照的字符串转成日期(时间)值回传,“date_text”要是固定的日期字符串或参照的字符串字段,“date_format”要是参照的日期字符串格式。例如 A1 字符串的字段值是“2019/02/01”,希望可以将此转成日期字段值的话,可在日字段套用公式“DATEVALUE(A1,"yyyy/MM/dd")”来获取转换后的结果 |
HOUR() | 此公式支持三种用法: 1. 参数带入 0-1,传回 24 小时的比例。例如:HOUR(0.5)=12。 2. 参数带入日期字段,传回该字段的小时。例如:A9 字段值为 18:11:19,HOUR(A9)=18。 3. 参数带入日期字符串,传回字符串中的小时。例如:HOUR("2020/10/13 17:34:56")=17 |
MINUTE() | 此公式支持三种用法: 1. 参数带入 0-1,传回 60 分钟的比例。例如:MINUTE(0.5)=30。 2. 参数带入日期字段,传回该字段的分钟。例如:A9 字段值为 18:11:19,MINUTE(A9)=11。 3. 参数带入日期字符串,传回字符串中的分钟。例如:MINUTE("2020/10/13 17:34:56")=34 |
SECOND() | 此公式支持三种用法: 1. 参数带入 0-1,传回 60 秒的比例。例如:SECOND(0.75)=45。 2. 参数带入日期字段,传回该字段的秒。例如:A9 字段值为18:11:19,SECOND(A9)=19。 3. 参数带入日期字符串,传回字符串中的秒。例如:SECOND("2020/10/13 17:34:56")=56。 |
TIME(hour, minute, second) | 传回特定时间的小数,所传回的小数点数字是介于 0 到 0.99988426 之间的值,代表自 0:00:00 到 23:59:59 的时间。
Hour 代表小时的数字,范围从 0 到 32767。任何比 23 大的值将会除于 24,且余数视为小时值。例如:TIME(27,0,0) = TIME(3,0,0) = 0.125 或 3:00 AM。 Minute 代表分钟的数字,范围从 0 到 32767。任何大于 59 的值将会转换成小时和分钟。例如:TIME(0,750,0) = TIME(12,30,0) = 0.520833 或 12:30 PM。 Second 代表秒钟的数字,范围从 0 到 32767。任何大于 59 的值将会转换成小时、分钟和秒钟。例如:TIME(0,0,2000) = TIME(0,33,22) = 0.023148 或 12:33:20 AM。 |
会以天数作为日期的增减:如果 A1 是日期字段,A1+7 的日期则为 A1 的后七天。
另一个常用的日期公式是计算年龄:如果 A1 为出生年月日,你可以设置公式“(TODAY()-A1)/365.25”,来显示目前年龄,年龄的字段种类记得选择数值,才能够正确用数值来做公式运算。
会需要都是时间字段(格式 HH:mm) 或搭配数字字段来做运算。
例如 A1 为开始时间(格式 HH:mm),A2 为结束时间(格式 HH:mm),计算开始到结束的时间有两种作法:
A3 时间计算字段(格式 HH:mm)可套用公式“A2-A1” ; 或是 A3 如果为数字字段(格式 0.0),则可套用公式“(A2-A1)/60”。
注意:
(1) 公式所参照的时间字段皆不可为空值,否则公式将无法触发(无法用一个时间加上或减去空值来计算时间)。若计算字段会有空值的情况,建议将字段格式改为数字字段,这样字段为空值的情况下,也可以顺利触发公式。
范例: A1 为开始时间(格式 HH:mm), A2 为耗费时间(格式 HH:mm),想要透过公式 A2+A1 计算出 A3 结束时间(格式 HH:mm),但如果 A2 在数据中有可能为空值,则 A3 的公式会无法触发导致字段也变成空值。若将 A2 的耗费时间改为数字字段(代表计算耗费几分钟),即使 A2 为空值的情况下, A3 也可以显示字段内容。
(2) 以上时间计算方式只适用于同一天内的时间计算,如果有跨日,例如晚上 10 点到早上 4 点,就必须用下面的方法:
时间字段必须是包含日期的格式(例如 yyyy/MM/dd HH:mm),计算字段要是数字字段(格式 0.0),A1 为开始日及时间(yyyy/MM/dd HH:mm),A2 为结束日及时间(yyyy/MM/dd HH:mm),则时间计算字段 A3(数字格式0.0) 套用公式“(A2-A1)*24”。
套用在日期字段,会传回代表日期(起始日期)之前或之后指定工作日数的日期。工作日不包含周末、周日以及假日(但包含指定的工作日)。 您可以在计算发票到期日、预期递送时间或工作日数时,使用 WORKDAY 来排除周末或假日,但包含指定的工作日。
公式 | 句法 |
---|---|
WORKDAY | WORKDAY(start_date,days,["holidays"], ["makeup_workdays"]) |
WORKDAY 需要包含下列参数:
Start_date:是必要的,代表开始日期的日期。
Days:是必要的,代表 start_date 之前或之后的非周末和非假日的天数。正值代表未来的日期;负值代表过去的日期。
Holidays:是选择性的,这是要从工作行事历中排除之一个或多个日期的选择性清单,例如国定假日。此清单要是代表日期之序列值的数组常量。
Makeup_workdays:是选择性的,这是要从工作行事历中要包含之一个或多个日期的选择性清单,例如补班日。此清单要是代表日期之序列值的数组常量。
范例 1:
日期字段套用公式“WORKDAY(A1,A2,["2017/06/16","2017/06/19"])”
假设 A1 的日期值为 2017/06/15,A2 的数字为 9,指定不计算在内的日期为 “2017/06/16” 跟 “2017/06/19”,则从开始日期之后不包括周末以及指定的假日的第九天计算出来的结果会是“2017/06/30”。
范例 2:
日期字段套用公式“WORKDAY(A1,A2,["2017/06/16","2017/06/19"],["2017/06/24"])”
假设 A1 的日期值为 2017/06/15,A2 的数字为 9,指定不计算在内的日期为 “2017/06/16” 跟 “2017/06/19”,但指定“2017/06/24”这个礼拜六为工作日,则从开始日期之后不包括周末以及指定的假日,但是包括指定工作日的第九天计算结果会是“2017/06/29”。
备注:在代入holidays 或 makeup_workdays 参数时,若不想在每一张表单各自设置,希望全数据库可以统一日期,可以定义一个“数组”的全域常量并代入公式中,详细说明请参阅这篇说明。
套用在日期字段,使用参数指出哪几天和多少天是周末及指定哪几天是工作日,会传回起始日期之前或之后指定工作日数的日期。工作日不包含周末、假日,但包含指定工作日。可以用于计算发票到期日、预期递送时间或工作日数时。
公式 | 句法 |
---|---|
WORKDAY.INTL | WORKDAY.INTL(start_date,days,[weekend_no],["holidays"], ["makeup_workdays"]) |
WORKDAY.INTL 需要包含下列参数:
Start_date:是必要的,代表开始日期的日期。
Days:是必要的,代表 start_date 之前或之后的非周末和非假日的天数。 正值代表未来的日期;负值代表过去的日期。
Weekend_no:是选择性的,若周末日为非周六及周日时,可参阅下方表格来带入相对应 Weekend 数字。
Holidays:是选择性的,这是要从工作行事历中排除之一个或多个日期的选择性清单,例如国定假日。此清单要是代表日期之序列值的数组常量。
Makeup_workdays:是选择性的,这是要从工作行事历中要包含之一个或多个日期的选择性清单,例如补班日。此清单要是代表日期之序列值的数组常量。
范例 1:
日期字段套用公式“WORKDAY.INTL(A1,A2,2,["2017/06/16","2017/06/19"])”
假设 A1 的日期值为 2017/06/15,A2 的数字为 9,以星期日及星期一作为周末,指定不计算在内的日期为“2017/06/16”跟“2017/06/19”,则从开始日期之后不包括周末及指定假日的第九天计算结果会是“2017/06/29”。
备注:在代入holidays 或 makeup_workdays 参数时,若不想在每一张表单各自设置,希望全数据库可以统一日期,可以定义一个“数组”的全域常量并代入公式中,详细说明请参阅这篇说明。
套用在数字字段,会传回 start_date 与 end_date 间的全部工作日数。工作日不包括周末与任何指定的假日,但包含指定工作日。使用 NETWORKDAYS,来根据某段期间内的工作天数计算员工薪资。
公式 | 句法 |
---|---|
NETWORKDAYS | NETWORKDAYS(start_date, end_date, ["holidays"], ["makeup_workdays"]) |
NETWORKDAYS 需要包含下列参数:
Start_date:是必要的,代表开始日期的日期。
End_date:是必要的,代表结束日期的日期。
Holidays:是选择性的,这是要从工作行事历中排除之一个或多个日期的选择性清单,例如国定假日。此清单要是代表日期之序列值的数组常量。
Makeup_workdays:是选择性的,这是要从工作行事历中要包含之一个或多个日期的选择性清单,例如补班日。此清单要是代表日期之序列值的数组常量。
范例 1:
数字字段套用公式“NETWORKDAYS(E1,E2,['2017/10/04','2017/10/09','2017/10/10'])”
假设 E1 的日期值为 2017/10/01,E2 的日期值为 2017/10/31,指定不计算在内的日期为“2017/10/04、2017/10/09、2017/10/10”,则从开始日期至结束日其不包括周末以及指定的三天假日所计算出来的工作日数会是“19”天。
范例2:
数字字段套用公式“NETWORKDAYS(E1,E2,['2017/10/04','2017/10/09','2017/10/10'],['2017/10/28','2017/10/29'])”
假设 E1 的日期值为 2017/10/01,E2 的日期值为 2017/10/31,指定不计算在内的日期为“2017/10/04、2017/10/09、2017/10/10”,并指定“2017/10/28 (六)、2017/10/29 (日)”为工作日,则从开始日期至结束日其不包括周末以及指定的三天假日,但是包括指定工作日所计算出来的工作日数会是“21”天。
备注:在代入holidays 或 makeup_workdays 参数时,若不想在每一张表单各自设置,希望全数据库可以统一日期,可以定义一个“数组”的全域常量并代入公式中,详细说明请参阅这篇说明。
套用在数字字段,使用参数指出哪几天和多少天是周末,以传回两个日期之间的所有工作日数。 工作日不包括周末与任何指定的假日,但包含指定的工作日。
公式 | 句法 |
---|---|
NETWORKDAYS.INTL | NETWORKDAYS.INTL(start_date,end_date,[weekend_no],["holidays"], ["makeup_workdays"]) |
NETWORKDAYS.INTL 需要包含下列参数:
Start_date和End_date:是必要的, 这是要计算差距的日期。 Start_date 可以早于、等于或晚于 end_date。
Weekend_no:是选择性的,若周末日为非周六及周日时,可参阅下方表格来带入相对应Weekend数字。
Holidays:是选择性的,这是要从工作行事历中排除之一个或多个日期的选择性清单,例如国定假日。此清单要是代表日期之序列值的数组常量。
Makeup_workdays:是选择性的,这是要从工作行事历中要包含之一个或多个日期的选择性清单,例如补班日。此清单要是代表日期之序列值的数组常量。
范例:
数字字段套用公式“NETWORKDAYS.INTL(E1,E2,11,['2017/06/16'])”
假设 E1 的日期值为 2017/06/01,E2 的日期值为 2017/06/30,指定周末日为星期日一天而已,并指定不计算在内的日期为“2017/06/16”,则从开始日期至结束日期,不包括周末(仅星期日)及指定不计算的日期,所计算出来的工作日数会是“25”天。
备注:在代入holidays 或 makeup_workdays 参数时,若不想在每一张表单各自设置,希望全数据库可以统一日期,可以定义一个“数组”的全域常量并代入公式中,详细说明请参阅这篇说明。
Weekend 参数对应表:
Weekend数字 | 代表周末日 |
---|---|
1或省略 | 星期六、星期日 |
2 | 星期日、星期一 |
3 | 星期一、星期二 |
4 | 星期二、星期三 |
5 | 星期三、星期四 |
6 | 星期四、星期五 |
7 | 星期五、星期六 |
11 | 仅星期日 |
12 | 仅星期一 |
13 | 仅星期二 |
14 | 仅星期三 |
15 | 仅星期四 |
16 | 仅星期五 |
17 | 仅星期六 |
使用此公式可以计算某日期为该年的第几周,并且可以自订每周起始日。
公式 | 句法 |
---|---|
WEEKNUM | WEEKNUM(Date,[return_type]) |
WEEKNUM 需要包含下列参数:
Date:填入要计算的日期字段。
Return_type:用来设置一周的起始星期。如未指定,系统将默认为 1(即星期日为每周的第一天)。其他可用的参数如下表所示。
此函数使用两种系统:
系统 1 :包含 1 月 1 日的该周是该年的第一周,因此会编号为第 1 周。
系统 2 :包含某年的第一个星期四的该周是该年的第一周,因此编号为第 1 周。 此系统是 ISO 8601 规定的方法,通常也是欧洲地区的周编号系统。
如果没有特别的需求,建议使用系统 1 的参数即可。
起始日参数对应表:
Return_type | 一周的开始 | 系统 |
---|---|---|
1 或省略 | 星期日 | 1 |
2 | 星期一 | 1 |
11 | 星期一 | 1 |
12 | 星期二 | 1 |
13 | 星期三 | 1 |
14 | 星期四 | 1 |
15 | 星期五 | 1 |
16 | 星期六 | 1 |
17 | 星期日 | 1 |
21 | 星期一 | 2 |
范例:
假设 A2 是日期字段,值为 2020/01/07(星期二),使用不同参数的 WEEKNUM 公式会有以下结果:
公式 | 结果 |
---|---|
WEEKNUM(A2) | 2 |
WEEKNUM(A2, 13)(指定星期三为一周的开始) | 1 |