日期函数
日期函数简介
关于日期函数的两个基本概念:
- 时间戳(timestamp):时间戳是计算机记录时间的一种格式。通常是一个字符序列,唯一地标识某一刻的时间。在智管工表单中,「日期时间」字段便是由这样的序列来存储的。
- 日期对象:可以理解为年月日时分秒;日期对象的格式为 Fri Feb 10 2023 00:00:00 GMT+0800 (中国标准时间) ,即北京时间 2023年2月10日00:00:00。
日期时间字段的返回值为日期对象,单位是毫秒;本文中的日期函数的参数均可直接使用日期字段。如,YEAR(日期时间字段)
。
DATE
DATE函数可用于将时间戳转换为日期对象。
函数用法:
DATE(str|timestamp)
**函数示例:**如2023年1月1日的日期对象可以用如下公式表示:
- DATE(日期时间)
- DATE("2023-01-01")
- DATE(1672531200000)
这三个公式都表示“Sun Jan 01 2023 00:00:00 GMT+0800”。
DATEDELTA
DATEDELTA 函数可以在指定日期的基础上增加/减少时间(年、月、日等)。
函数用法:
DATEDELTA(date, deltadays, [unit])
其中各参数的含义如下:
-
date: 必需,初始日期;
-
deltadays:必需,需要加减的时间,正数为增加,负数为减少。
-
unit:可选,需要加减的时间单位,默认为"d",可设置的参数如下:
- “y”:年数
- “M”:月数
- “d”:天数
- “h”:小时数
- “m”:分钟数
- “s”:秒数
函数示例: 如生产场景中,录入生产日期和保质期后,可通过 DATEDELTA 函数计算产品的过期时间:DATEDELTA(生产日期, 15, 'd')
。
注:DATEDELTA 函数须在日期时间字段内使用。
DATEDIF
DATEDIF 函数可用于计算两个时间的差值。
函数 用法:
DATEDIF(start_date, end_date, [unit])
其中各参数的含义如下:
-
start_date:必需, 开始时间;
-
end_date:必需,结束时间;
-
unit:可选,默认为 “d”,可设置的参数如下:
- “y”:年数
- “M”:月数
- “d”:天数
- “h”:小时数
- “m”:分钟数
- “s”:秒数
函数示例: 通过 DATEDIF 函数计算时间差的年数、月数、天数等,可应用于计算项目的消耗天数、活动的举办天数等。
NOW
NOW 函数可返回当前时间。
NOW()
函数用法:
函数示例: 如签到场景中,可通过 NOW 函数生成当前时间,完成签到。
注:在日期时间字段中使用 NOW 函数时,时间类型可在字段属性中设置。
YEAR
YEAR 函数可用于返回日期时间中的年份。
函数用法:
YEAR(date)
函数示例: 如计算生产时间中对应的年份,可设置公式为YEAR(生产日期),即 2023-02-10 对应的年份为2023。
MONTH
MONTH 函数可用于返回日期中的月份, 值是介于 1 到 12 之间的整数。
函数用法:
MONTH(date)
函数示例: 如计算考勤日期对应的月份,可设置公式为MONTH(考勤 时间),即 2023-01-02 对应的月份为 1。
DAY
DAY 函数可用于返回日期中的天数, 值是介于 1 到 31 之间的整数。
函数用法:
DAY(date)
函数示例: 如计算签到日期中对应的天数,可设置公式为DAY(签到日期),即 2023-01-20 对应的天数为 20。
HOUR
HOUR 函数可用于返回日期时间中的小时数。
函数用法:
HOUR(date)
函数示例: 如计算打卡时间中对应的小时数,可设置公式为HOUR(打卡时间),即 2023-01-01 14:38:01 对应的小时数为 14。
MINUTE
MINUTE 函数可用于返回日期时间中的分钟数。
函数用法:
MINUTE(date)
函数示例: 如计算打卡时间中对应的分钟数,可设置公式为MINUTE(打卡时间),即 2023-01-05 16:14:24 对应的分钟数为 14。
SECOND
SECOND 函数可用于返回日期时间中的秒数。
函数用法:
SECOND(date)
函数示例: 如计算签到时间中对应的秒数,可设置公式为SECOND(签到时间),即 2023-02-03 08:49:44 对应的秒数为 44。
DAYS
DAYS 函数可计算两个日期之间的天数。
函数用法:
DAYS(end_date, start_date)
其中各参数的含义如下:
- end_date: 必需,结束日期;
- start_date: 必需,起始日期。
函数示例: 如考勤请假场景中,手动输入请假开始、结束日期,设置公式为DAYS(结束日期,开始日期),即可计算出请假天数。
DAYS360
DAYS360 函数可按照一年 360 天的算法(每个月 30 天,一年 12 个月),返回两个日期间相差的天数。
函数用法:
DAYS360(end_timestamp, start_timestamp, method)
其中各参数的含义如下:
- end_timestamp: 必需,结束日期;
- start_timestamp: 必需,起始日期;
- method: 可选,用于指定在计算中采用美国方法或欧洲方法,具体规则如下:
方法 | 定义 |
---|---|
fase或不填 | 美国 (NASD) 方法。 如果起始日期是一个月的最后一天,则等于同月的 30 号。 如果终止日期是一个月的最后一天,并且起始日期早于 30 号,则终止日期等于下一个月的 1 号,否则,终止日期等于本月的 30 号。 |
true | 欧洲方法。 如果起始日期和终止日期为某月的 31 号,则等于当月的 30 号。 |
函数示例: 在会计计算中,财会系统一般按照一年 12 个月,每月 30 天计算,可使用 DAYS360 函数计算支付款项等。
ISOWEEKNUM
ISOWEEKNUM 函数可用于计算日期在全年中的 ISO 周数。
其中,ISO 周数根据 ISO 8601 的规则计算得出,具体计算方法如下:
- 每年可能有 52 周或 53 周;
- 周一至周日为一个完整周;
- 每周的周一是该周的第 1 天,周日是该周的第 7 天;
- 每年的第一周为当年的第一个周四所在的周:如 2017 年 1 月 5 日为当年的第一个周四,那么 2017-01-02 至 2017-01-08 为 2017 年第一周;
- 每年的最后一周为当年最后一个周四所在的周:如 2016 年 12 月 29 日为当年的最后一个周四,那么 2016-12-26 至 2017-01-01 为 2016 年的最后一周。
函数用法:
ISOWEEKNUM(date)
函数示例: ISOWEEKNUM 函数可用于计算政府和商务的会计年度,用以维持时序。如ISOWEEKNUM('2023-01-05)
,返回结果是1。
NETWORKDAYS
NETWORKDAYS 函数可计算两个日期之间完整的工作日数值,其中,工作日不包括周末和专门指定的假期。
函数用法:
NETWORKDAYS(start_date, end_date, [holidays], [change_workday])
其中各参数的含义如下:
- start_timestamp:必需, 开始日期;
- end_timestamp:必需,结束日期;
- holidays:可选,可填写需要从工作日中排除的一个或多个日期,如各种省/市/自治区和国家/地区的法定假日及非法定假日。
- change_workday:可选,是否考虑法定节假日调休,可填0(否)或1(是),默认为1。为1 时会根据国务院发布的放假、调休通知自动计算工作日(只提供最近3年的法定节假日计算,超过这个区间,无法准确计算调休日期)。
函数示例: 如,NETWORKDAYS(开始时间,结束时间,[DATE("2023-06-22"),DATE("2023-06-23")])
,开始时间是2023-06-19,结束时间是2023-06-23,返回结果是3
TIMESTAMP
TIMESTAMP 函数可将日期对象转换成时间戳。
函数用法:
TIMESTAMP(date)
函数示例: 在公式中想对日期时间字段进行比较时,可通过 TIMESTAMP 函数将日期对象转换为时间戳格式,以便于比较日期字段的大小。
TIME
TIME 函数可返回特定时间的十进制数字。时间值为日期值的一部分,并用十进制数表示(例如 12:00 PM 可表示为 0.5,因为此时是一天的一半)。
函数用法:
TIME(hour, minute, second)
其中各参数的含义如下:
- hour: 必需,代表小时;任何大于 23 的值都会除以 24,商作为天数,余数作为小时数。 例如,TIME(27,0,0) = 1.125, TIME(3,0,0) = 0.125,即天数不同,小数部分的时间相同;
- minute: 必需,代表分钟;任何大于 59 的值将转换为小时和分钟。 例如,TIME(0,750,0) = TIME(12,30,0) = 0.520833;
- second: 必需,代表秒;任何大于 59 的值将转换为小时、分钟和秒。 例如,TIME(0,0,2000) = TIME(0,33,20) = 0.023148。
函数示例: 如,生产场景中,可通过 TIME 函数计算产品的待机时长。
TODAY
TODAY 函数可用于获取当前系统的日期,可精确到秒,时间为今日的起始时间。
函数用法:
TODAY()
函数示例:
1)TODAY 函数可直接在日期时间字段中使用,显示的日期精度由日期时间字段的「字段属性 >> 类型」决定:
如,当设置日期时间字段类型为「年-月-日-时-分-秒」时,TODAY 函数的使用效果如下:
2)也可搭配 TEXT 函数 将获取的日期转换为文本格式,如设置公式为TEXT(TODAY(),"yyyyMMddhhmmss"),即可获取日期的年月日时分秒。
WEEKNUM
WEEKNUM 函数可用于计算某日期在一年中处于第几周。
函数用法:
WEEKNUM(date, return_type)
其中各参数的含义如下:
- date: 必需,指定日期;
- return_type: 可选参数,确定一周从哪一天开始,具体参数值对应的日期如下表:
每周的第一天 | return_type |
---|---|
星期日 | 1/17/为空 |
星期一 | 2/11 |
星期二 | 12 |
星期三 | 13 |
星期四 | 14 |
星期五 | 15 |
星期六 | 16 |
注:当 return_type 的值不在上述表格范围内或未填写该参数时,默认为从星期日开始计算。
函数示例: 当时间选定为 2023 年 1 月 2 日时,分别以星期日和星期一作为一周的第一天,得到的周次结果是不同的。
WORKDAY
WORKDAY 函数可计算在某日期(起始日期)之前或之后、与该日期相隔指定工作日的某一日期的日期值。 工作日不包括周末和专门指定的假日。
函数用法:
WORKDAY(start_date, days, [holidays])
其中各参数的含义如下:
- start_date: 必需,起始日期;
- days: 必需,起始日期之前或之后不含周末及节假日的天数。 Days 为正值将生成未来日期;为负值则生成过去日期;
- holidays: 可选,其中包含需要从工作日历中排除的一个或多个日期,例如各种省/市/自治区和国家/地区的法定假日及非法定假日。该列表可以是由日期所构成的数组常量。
注 :holidays 参数可通过如下两种方式输入:
- 使用 DATE 函数或作为其他函数的结果输入;如,使用函数
DATE("2023-08-11")
输入 2012年8月11日; - 直接调用子表单中的日期时间字段或主表中的日期时间字段(多个主表字段使用中括号包裹)。
函数示例: 如,计算交货时间时,需将 2024 年 9 月 10 日制定为假期,则设置公式为WORKDAY(下单时间,处理工作日,[DATE("2024-09-10")])
,扣除周末和假期,即可根据下单时间计算出对应的交货时间。