日期函數
日期函數簡介
日期時間欄位的傳回值為時間戳(timestamp),單位是毫秒;本文中的日期函數的參數均可直接使用日期欄位。如,YEAR(日期時間欄位)。
下面介紹關於日期函數的兩個基本概念:
- 時間戳(timestamp):時間戳是電腦記錄時間的一種格式。通常是一個字符序列,唯一地標識某一刻的時間。在Jodoo表單中,「日期時間」欄位便是由這樣的序列來儲存的。
- 日期對象:可以理解為年月日時分秒;日期對象的格式為 Sat Aug 01 2015 00:00:00 GMT+0800,即北京時間 2015 年 8 月 1 日 00:00:00,日期對象可以進行各種運算,比如日期加減法等等。
DATE
DATE(timestamp)
DATE 函數可用於將時間戳轉換為日期物件。
透過以下公式可將年月日(時分秒)轉換為日期物件:
DATE(year,month,day)
DATE(year,month,day,hour,minute,second)
其中各參數的含義如下:
- year: 必需,年份;
- month: 必需,月份;
- day: 必需,天數;
- hour: 非必需,小時;
- minute: 非必需,分鐘;
- second: 非必需,秒。
例如,2023 年 1 月 1 日的日期物件可以用如下公式表示:
- DATE(日期時間)
- DATE(2023,1,1)
- DATE(2023,1,1,0,0,0)
這三個公式都表示“Sun Jan 01 2023 00:00:00 GMT+0800”
DAY
DAY 函數可用於返回日期中的天數, 值是介於 1 到 31 之間的整數。
函數用法:
DAY(timestamp)
函數範例:如計算簽到日期中對應的天數,可設定公式為DAY(簽到日期),即 2023-01-20 對應的天數為 20。
DAYS
DAYS 函數可計算兩個日期之間的天數。
函數用法:
DAYS(end_timestamp, start_timestamp)
其中各參數的含義如下:
- end_timestamp: 必需,結束日期;
- start_timestamp: 必需,起始日期。
函數範例:如考勤請假場景中,手動輸入請假開始、結束日期,設定公式為DAYS(結束日期,開始日期),即可計算出請假天數。
DAYS360
DAYS360 函數可按照一年 360 天的算法(每個月 30 天,一年 12 個月),返回兩個日期間相差的天數。
函數用法:
DAYS360(end_timestamp, start_timestamp, method)
其中各參數的含義如下:
- end_timestamp: 必需,結束日期;
- start_timestamp: 必需,起始日期;
- method: 可選,用於指定在計算中採用美國方法或歐洲方法,具體規則如下:
方法 | 定義 |
false 或不填 | 美國 (NASD) 方法。 如果起始日期是一個月的最後一天,則等於同月的 30 號。 如果終止日期是一個月的最後一天,並且起始日期早於 30 號,則終止日期等於下一個月的 1 號,否則,終止日期等於本月的 30 號。 |
true | 歐洲方法。 如果開始日期和終止日期為某月的 31 號,則等於當月的 30 號。 |
函數範例:在會計計算中,財會系統一般按照一年 12 個月,每月 30 天計算,可使用 DAYS360 函數計算支付款項等。
DATEDIF
DATEDIF 函數可用於計算兩個時間的差值。
函數用法:
DATEDIF(start_timestamp, end_timestamp, [unit])
其中各參數的含義如下:
- start_timestamp:必需, 開始時間;
- end_timestamp:必需,結束時間;
- Unit:可選,預設為 “d”,可設定的參數如下:
- “y”:年數
- “M”:月數
- “d”:天數
- “h”:小時數
- “m”:分鐘數
- “s”:秒數
附註:
如結束日期小於開始日期,則計算不出結果。
函數範例:透過 DATEDIF 函數計算時間差的年數、月數、天數等,可應用於計算專案的消耗天數、活動的舉辦天數等。
附註:
詳細的 DATEDIF 函數使用案例可參考文件:計算兩個日期之間的時間差。
DATEDELTA
DATEDELTA 函數可以在指定日期的基礎上增加/減少天數。
函數用法:
DATEDELTA(timestamp, deltadays)
其中各參數的含義如下:
- timestamp: 必需,初始日期;
- deltadays:必需,需要加減的天數,正數為增加,負數為減少。
函數範例:如生產場景中,錄入生產日期和保質期後,可透過 DATEDELTA 函數計算產品的過期時間。
附註:
DATEDELTA 函數須在日期時間欄位內使用。
HOUR
HOUR 函數可用於返回日期時間中的小時數。
函數用法:
HOUR(timestamp)
函數範例:如計算打卡時間中對應的小時數,可設定公式為HOUR(打卡時間),即 2023-01-01 14:38:01 對應的小時數為 14。
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(timestamp)
函數範例:ISOWEEKNUM 函數可用於計算政府和商務的會計年度,用以維持時序。
MINUTE
MINUTE 函數可用於返回日期時間中的分鐘數。
函數用法:
MINUTE(timestamp)
函數範例:如計算打卡時間中對應的分鐘數,可設定公式為MINUTE(打卡時間),即 2023-01-05 16:14:24 對應的小時數為 14。
MONTH
MONTH 函數可用於返回日期中的月份, 值是介於 1 到 12 之間的整數。
函數用法:
MONTH(timestamp)
函數範例:如計算考勤日期對應的月份,可設定公式為MONTH(考勤時間),即 2023-01-02 對應的月份為 1。
NETWORKDAYS
NETWORKDAYS 函數可計算兩個日期之間完整的工作日數值,其中,工作日不包括週末和專門指定的假期。
函數用法:
NETWORKDAYS(start_timestamp, end_timestamp, [holidays])
其中各參數的含義如下:
- start_timestamp:必需, 開始日期;
- end_timestamp:必需,結束日期;
- holidays:可選,可填寫需要從工作日中排除的一個或多個日期,如各種省/市/自治區和國家/地區的法定假日及非法定假日。
附註:
holidays 參數可透過如下兩種方式輸入:
使用 DATE 函數或作為其他函數的結果輸入;如,使用函數 DATE(2012,5,23) 輸入 2012 年 5 月 23 日;
直接調用子表單中的日期時間欄位,主表中的日期時間欄位暫不支援直接調用。
函數範例:如,計算某員工 6 月外包工資時,需將 2023 年 6 月 22 日和 2023 年 6 月 23 日製定為假期,則設定公式為NETWORKDAYS(開始時間,結束時間,[DATE(2023,6,22),DATE(2023,6,23)]),即可根據開始、結束時間計算出對應的工作天數和工資
NOW
NOW 函數可返回當前時間。
函數用法:
NOW()
函數範例:如簽到場景中,可透過 NOW 函數生成當前時間,完成簽到。
附註:
在日期時間欄位中使用 NOW 函數時,時間類型可在欄位屬性中設定。
SYSTIME
SYSTIME 函數可返回當前伺服器時間。即使客戶端的時間被人為調整了,SYSTIME 函數不受影響,取得的仍然是伺服器時間。
函數用法:
SYSTIME()
函數範例:如簽到、打卡等場景中,可透過 SYSTIME 函數完成記錄系統時間,有效避免作弊的情況。
附註:
在日期時間欄位中使用 SYSTIME 函數時,時間類型可在欄位屬性中設定。
SECOND
SECOND 函數可用於返回日期時間中的秒數。
函數用法:
SECOND(timestamp)
函數範例:如計算簽到時間中對應的秒數,可設定公式為SECOND(簽到時間),即 2023-02-03 08:49:44 對應的秒數為 44。
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"),即可取得日期的年月日時分秒。
附註:
日期與文字格式的相互轉換,可參考文件:文字與日期格式相互轉換。
WEEKDAY
WEEKDAY 函數可用於計算日期的星期數,返回 0 到 6 之間的數值。
函數用法:
WEEKDAY(日期時間)
函數範例:如計算簽到日期對應的星期數,可設定公式為WEEKDAY(簽到日期),即 2023-05-26 對應的星期數為 5(星期五),2023-05-28 對應的星期數為 0(星期日)。
WEEKNUM
WEEKNUM 函數可用於計算某日期在一年中處於第幾周。
函數用法:
WEEKNUM(timestamp, return_type)
其中各參數的含義如下:
- timestamp: 必需,指定日期;
- return_type: 可選參數,確定一週從哪一天開始,具體參數值對應的日期如下表
return-type | 一週的第一天為 |
1/17/為空 | 星期日 |
2/11 | 星期一 |
12 | 星期二 |
13 | 星期三 |
14 | 星期四 |
15 | 星期五 |
16 | 星期六 |
附註:
當 return_type 的值不在上述表格範圍內或未填寫該參數時,預設為從星期日開始計算。
當時間選定為 2023/01/02 時,分別以週日和週一作為一週的第一天,得到的週次結果是不同的。
WORKDAY
WORKDAY 函數可計算在某日期(起始日期)之前或之後、與該日期相隔指定工作日的某一日期的日期值。 工作日不包括週末和專門指定的假日。
函數用法:
WORKDAY(start_timestamp, days, [holidays])
其中各參數的含義如下:
- start_timestamp: 必需,起始日期;
- days: 必需,起始日期之前或之後不含週末及節假日的天數。 Days 為正值將生成未來日期;為負值則生成過去日期;
- holidays: 可選,其中包含需要從工作日曆中排除的一個或多個日期,例如各種省/市/自治區和國家/地區的法定假日及非法定假日。該列表可以是由日期所構成的陣列常量。
附註:
holidays 參數可透過如下兩種方式輸入:
1. 使用 DATE 函數或作為其他函數的結果輸入;如,使用函數 DATE(2012,5,23) 輸入 2012/05/23;
2. 直接調用子表單中的日期時間欄位,主表中的日期時間欄位暫不支援直接調用。
如,計算交貨時間時,需將 2023/04/05 製定為假期,則設定公式為WORKDAY(下單時間,處理工作日,[DATE(2023,4,5)]),扣除週末和假期,即可根據下單時間計算出對應的交貨時間。
YEAR
YEAR 函數可用於返回日期時間中的年份。
函數用法:
YEAR(timestamp)
函數範例:如計算生產時間中對應的秒年份,可設定公式為YEAR(生產日期),即 2023-02-10 對應的年份為 2023。