反饋已提交

網絡繁忙

日期和時間函式概述

1. 概述

注:一些常用的日期函式寫法詳情參見 常見日期函式 。

1.1 版本

FineReport 版本
功能變動
11.0-
11.0.4新增 ENDOFMONTH、ISWORKDAY 函式

1.2 應用場景

日期函式允許對資料源中的日期進行操作。

可能有一個各個值為年、月、日的日期欄位 (2004-04-15),可以使用日期函式(例如 DATEINMONTH 函式)依據這些現有值建立新的日期值。

例如,可以尋找任何現有日期值的「當月第一天」。

在儲存格中輸入:=DATEINMONTH("2004-04-15",1),如下圖所示:

如果原始日期為「2004-04-15」,則使用上面的計算會傳回「2004-04-01」,即當前時間對應月份的第一天,如下圖所示:

1.3 注意事項

  • 函式中以日期作為參數因素的,其中日期的形式都必須是 yyyy/mm/dd,而且必須用英文環境下雙引號(" ")引用。

  • 若日期函式不合法,則會用當前時間進行計算。

  • 若在正文元件中使用日期函式顯示 yyyy/mm/dd 格式,需使用 Format函式 進行轉換。

2. DATE-某一特定日期

DATE(year,month,day):傳回一個表示某一特定日期的系列數。

Year:代表年,可為一到四位數。

Month:代表月份。

若 1<=month<= 12,則函式把參數值作為月。

若 month>12,則函式從年的一月份開始往上累加。例如:DATE(2000,25,2) 等於 2002 年 1 月 2 日的系列數。

Day:代表日。

若日期小於等於某指定月的天數,則函式將此參數值作為日。

若日期大於某指定月的天數,則函式從指定月份的第一天開始往上累加。若日期大於兩個或多個月的總天數,則函式把減去兩個月或多個月的餘數加到第三或第四個月上,依此類推。

如:DATE(2000,3,35)等於 2000 年 4 月 4 日的系列數。

範例:

DATE(1978, 9, 19)等於 1978 年 9 月 19 日。

DATE(1211, 12, 1)等於 1211 年 12 月 1 日。

其中月和日為 1 到 9 之間的數字時,不需要在前面加上 0 而直接寫數字如 DATE(2011, 2, 1)即可。

3. DATEDELTA-某日期後幾天

DATEDELTA(date, deltadays):傳回一個日期——date 後 deltadays 的日期。deltaDays 可以為正值,負值,零。

範例:

DATEDELTA("2008-08-08", -10)等於 2008-07-29。

DATEDELTA("2008-08-08", 10)等於 2008-08-18。

4. DATEDIF-時間差天數

1)概述

文法DATEDIF(start_date,end_date,unit,method)傳回兩個指定日期間的天數、月數或年數。
參數1Start_date代表所指定時間段的初始日期
參數2End_date代表所指定時間段的終止日期
參數3Unit函式傳回資訊的類型
參數4method可選參數,預設傳回日期差值的絕對值

2)注意事項

若unit="Y",則DATEDIF傳回指定時間段的年差數。

若unit="M",則DATEDIF傳回指定時間段的月差數。

若unit="D",則DATEDIF傳回指定時間段的日差數。

若unit="MD",則DATEDIF忽略年和月,傳回指定時間段的日差數。

若unit="YM",則DATEDIF忽略年和日,傳回指定時間段的月差數。

若unit="YD",則DATEDIF忽略年,傳回指定時間段的日差數。

若method=1,則DATEDIF傳回日期差值的絕對值。

若method=-1,則DATEDIF傳回日期差值時,會考慮正負情況。

3)範例

DATEDIF("2001/2/28","2004/3/20","Y") 等於 3,即在 2001 年 2 月 28 日與 2004 年 3 月 20 日之間有 3 個整年。

DATEDIF("2001/2/28","2004/3/20","M") 等於 36,即在 2001 年 2 月 28 日與 2004 年 3 月 20 日之間有 36 個整月。

DATEDIF("2001/2/28","2004/3/20","D") 等於 1116,即在 2001 年 2 月 28 日與 2004 年 3 月 20 日之間有 1116 個整天。

DATEDIF("2001/2/28","2004/3/20","MD") 等於 8,即忽略月和年後,2001 年 2 月 28 日與 2004 年 3 月 20 日的差為 8 天。

DATEDIF("2001/1/28","2004/3/20","YM") 等於 2,即忽略日和年後,2001 年 1 月 28 日與 2004 年 3 月 20 日的差為 2 個月。

DATEDIF("2001/2/28","2004/3/20","YD") 等於 21,即忽略年後,2001 年 2 月 28 日與 2004 年 3 月 20 日的差為 21 天。

4. DATEINMONTH

DATEINMONTH(date, number):函式傳回在某一個月當中第幾天的日期。

範例:

DATEINMONTH("2008-08-08", 20) 等於 2008-08-20。

5. DATEINQUARTER-某一個季度當中第幾天的日期

DATEINQUARTER(date, number):函式傳回在某一個季度當中第幾天的日期。

範例:

DATEINQUARTER("2009-05-05", 20) 等於 2009-04-20。

6. DATEINWEEK

DATEINWEEK(date, number):函式傳回在某一個星期當中第幾天的日期。

範例:

dateInWeek("2008-08-28", 2)等於 2008-08-26。

7. DATEINYEAR

DATEINYEAR(date, number):函式傳回在某一年當中第幾天的日期。

範例:

DATEINYEAR("2008/12/03", 300)等於 2008-10-26。

8. DATESUBDATE-兩個日期之間的時間差

1)概述

文法DATESUBDATE(date1, date2, op)傳回兩個日期之間的時間差
參數1date1代表所指定時間段的初始日期
參數2date2代表所指定時間段的終止日期
參數3op

表示傳回的時間單位

"s",以秒為單位。

"m",以分鐘為單位。

"h",以小時為單位。

"d",以天為單位。

"w",以週為單位。

2)注意事項

計算結果預設為 date1-date2 ,會考慮正負情況。

3)範例

DATESUBDATE("2008-08-08", "2008-06-06","h") 等於 1512。

9. DATETONUMBER

DATETONUMBER(date):傳回自 1970 年 1月 1日 08:00:00 GMT 經過的毫秒數。

範例:

DATETONUMBER("2008-08-08") 等於 1218124800000。

10. DAY

DAY(serial_number):傳回日期中的日。DAY 是介於 1 和 31 之間的一個數。

Serial_number:含有所求的年的日期,參數為空時預設為當天日期。

注: FineReport 將日期儲存為系列數,一個系列數代表一個與之匹配的日期,以方便使用者對日期進行數值式計算。

在 1900 年日期系統中,FineReport 試算表將 1900 年 1 月 1 日儲存為系列數 2,將 1900 年 1 月 2 日儲存為系列數 3,將 1900 年 1 月 3 日儲存為系列數 4……依此類推。如在1900 年日期系統,1998 年 1 月 1 日存為系列數 35796。

範例:

DAY("2000/1/1") 等於 1。

DAY("2006/05/05") 等於 5。

DAY("1997/04/20") 等於 20。

DAY(35796) 等於1。

11. DAYS360

DAYS360(start_date,end_date,method):按照一年 360 天的算法(每個月以 30 天計,一年共計 12 個月),傳回兩日期間相差的天數,這在會計計算中將會用到的。如果財務系統是基於一年 12 個月,每月 30 天,可用此函式幫助計算支付款項。

Start_date 和 end_date :是用於計算期間天數的起止日期。

Method:它指定了在計算中是採用歐洲方法還是美國方法。

Method 定義:FALSE 或忽略 美國方法 (NASD)。如果開始日期是一個月的 31 號,則等於同月的 30 號。如果終止日期是一個月的 31 號,並且開始日期早於 30 號,則終止日期等於下一個月的 1 號,否則,終止日期等於本月的 30 號。

TRUE 歐洲方法。無論是開始日期還是終止日期為一個月的 31號,都將等於本月的 30號。

注: FineReport 將日期儲存為系列數,一個系列數代表一個與之匹配的日期,以方便使用者對日期進行數值式計算。

在 1900 年日期系統中,FineReport 試算表將 1900 年 1 月 1 日儲存為系列數 2,將 1900 年 1 月 2 日儲存為系列數 3,將 1900 年 1 月 3 日儲存為系列數 4……依此類推。如在1900 年日期系統,1998 年 1 月 1 日存為系列數 35796。

範例:

DAYS360("1998/1/30", "1998/2/1") 等於 1

12. DAYSOFMONTH

DAYSOFMONTH(date):傳回從 1900 年 1 月後某年某月包含的天數。

範例:

DAYSOFMONTH("1900-02-01") 等於 28

DAYSOFMONTH("2008/04/04") 等於 30

13. DAYSOFQUARTER

DAYSOFQUARTER(date):傳回從 1900 年 1 月後某年某季度的天數。

範例:

DAYSOFQUARTER("2009-02-01") 等於 90

DAYSOFQUARTER("2009/05/05") 等於 91

14. DAYSOFYEAR

DAYSOFYEAR(year):傳回 1900 年以後某年包含的天數。

範例:

DAYSOFYEAR(2008) 等於 366

15. DAYVALUE

DAYVALUE(date):此函式可用來把一個日期轉化為一個系列數,回傳值為一個數字。

轉化原理:1900 年 1 月 1 日至 date 日期所經歷的天數,一個日期匹配一個系列數,方便使用者對日期進行數值式計算。

參數
含義參數格式
date需要轉化的日期

日期格式或代表日期的正文格式,例如“2000/2/28”

數字格式:整數,例如 1000001

date 為整數時,date 大於1000000,認為是 unix 時間;date 小於或等於1000000,認為是距 1900 年 1 月 1 日的天數。unix 時間是指從 1970 年 1 月 1 日 開始所經過的秒數,不考慮閏秒。

範例:

DAYVALUE("2000/1/1") 等於 36525。

DAYVALUE( 1000001) 等於 25568 。

注:如果 date 參數格式不規範,則傳回1900年 1 月 1 日至當前日期所經歷的天數。

例如:若今天為 2020/09/01,DAYVALUE("2008/02/") 等於 44074,DAYVALUE("0.877766")等於 44074

16. HOUR

HOUR(serial_number):傳回某一指定時間的小時數。函式指定 HOUR 為 0(0:00)到 23(23:00)之間的一個整數。

Serial_number:包含所求小時的時間。

範例:

HOUR("11:32:40") 等於 11。

17. MINUTE

MINUTE(serial_number):傳回某一指定時間的分鐘數,其值是介於 0 與 59 之間的一個整數。

Serial_number:包含所求分鐘數的時間。

範例:

MINUTE("15:36:25") 等於 36。

18. MONTH

MONTH(serial_number):傳回日期中的月,月是介於 1 和 12 之間的一個數。

Serial_number:含有所求的月的日期,參數為空時預設為當天日期。

注: FineReport 將日期儲存為系列數,一個系列數代表一個與之匹配的日期,以方便使用者對日期進行數值式計算。

在 1900 年日期系統中,FineReport 試算表將 1900 年 1 月 1 日儲存為系列數 2,將 1900 年 1 月 2 日儲存為系列數 3, 將 1900 年 1 月 3 日儲存為系列數 4……依此類推。

如:在 1900 年日期系統,1998 年 1 月 1 日存為系列數 35796。

範例:

MONTH("2004/5/5") 等於 5。

MONTH(35796) 等於 1。

19. MONTHDELTA

MONTHDELTA(date,delta):傳回指定日期 date 後 delta 個月的日期。

範例:

MONTHDELTA("2008-08-08", 4) 等於 2008-12-08。

20. NOW

NOW():獲取當前時間。

範例:

如果系統時間是 2017-06-27 14:58:06, 則:

NOW()等於 2017-06-27 14:58:06。

21. SECOND

SECOND(s erial_number):傳回某一指定時間的秒數,其值是介於 0 與 59 之間的一個整數。

Serial_number:包含所求秒數的時間。

範例:

SECOND("15:36:25") 等於 25。

SECOND("15:36:25", "HH:mm:ss") 等於 25。

22. TIME

TIME(hour,minute,second):傳回指定的日期和時間,日期會隨當天的日期改變。時間介於0:00:00 與23:59:59之間。

Hour:介於 0 到 23 之間的數。

Minute:介於 0 到 59 之間的數。

Second:介於 0 到 59 之間的數。

範例:

若當前時間為 2022-06-17 則TIME(14,40,0) 等於 2022-06-17 14:40:00。

23. TODATE-轉換為日期類型

1)概述

文法
TODATE()函式可以將各種日期形式的參數轉換為日期類型。 

2)注意事項

  • 格式中月份必須大寫 MM,年份小寫:yy(如果是用來解析形如“20081230”格式,則可寫為yyyyMMdd,其餘不可使用yyyy 形式)。天份小寫:dd

  • 第二個參數必須與第一個日期格式一致

       例如第一個參數為"2007/10/15"格式,那麼第二個參數格式需寫為 yyyy/MM/dd 格式:即 TODATE("2007/10/15","yyyy/MM/dd")

       第一個參數為"2007-10-15"格式,那麼第二個參數格式需寫為 yyyy-MM-dd 格式:即 TODATE("2007-10-15","yyyy-MM-dd")

       因此 todate 與 today 同時使用,第二個參數必須為 yyyy-MM-dd 格式:TODATE(TODAY(),"yyyy-MM-dd")

3)範例

有五種參數的形式,見備註:

公式結果
備註
TODATE(DATE(2007,12,12))傳回2007年12月12日組成的日期。

參數是一個日期型的參數,那麼直接將這個參數傳回


TODATE(1023542354746)傳回2002年6月8日

參數是以從1970年1月1日0時0分0秒開始的毫秒數,傳回對應的時間。

注:如果date是數字體別,當date大於1000000時,會被當作是unix時間;當date小於或等於1000000時,會被當作是距1900年1月1日的天數。

TODATE("2007/10/15")傳回2007年10月15日組成的日期參數是日期格式的正文,那麼傳回這個正文對應的日期。
TODATE("1/15/07","MM/dd/yy")傳回07年1月15日組成的日期。(MM必須是大寫)。

有兩個參數,第一個參數是一個日期格式的正文,第二個參數是用來解析日期的格式。

特別的,"yyyyMMdd"是用來解析形如“20081230”之類的日期格式的。比如TODATE("20110830","yyyyMMdd")傳回2011年08月30日組成的日期。

TODATE("星期一1/15/07","EEEMM/dd/yy","zh")傳回07年1月15日組成的日期,使用“zh(中文)”才能夠正常解析“星期一”這個字串。

第一個參數是一個日期格式的正文,第二個參數是用來解析日期的格式,第三個參數為解析日期的語言,如:zh(中文),en(英文),其中第三個參數為可選參數,預設使用伺服器的語言作為解析日期的語言。

使用“zh(中文)”才能夠正常解析“星期一”這個字串。注:如果EEE 和 MM/dd/yy 不一致, 以 MM/dd/yy 為主。 範例:TODATE("星期三1/15/07","EEEMM/dd/yy","zh")傳回07年1月15日組成的日期,實際是星期一,而不是星期三

24. TODAY

TODAY():是獲取當前的日期。

範例:

如果系統日期是 2011-06-20,則:TODAY() 等於 2011-06-20。

25. WEEKDAY

WEEKDAY(Serial_number):獲取日期並傳回星期數。回傳值為介於 0 到 6 之間的某一整數,分別代表星期中的某一天(從星期日到星期六)。

Serial_number:輸入日期。

注: FineReport 將日期儲存為系列數,一個系列數代表一個與之匹配的日期,以方便使用者對日期進行數值式計算。

在 1900 年日期系統中,FineReport 試算表將 1900 年 1 月 1 日儲存為系列數 2,將 1900 年 1 月 2 日儲存為系列數 3,將 1900 年 1 月 3 日儲存為系列數4……依此類推。

如在 1900 年日期系統,1998 年 1 月 1 日存為系列數 35796 。

範例:

WEEKDAY("2005/9/10")等於 6(星期六)。

WEEKDAY("2005/9/11")等於 0(星期日)。

WEEKDAY(35796)等於 4(星期四)。

注:如下圖所示,若公式引用儲存格,儲存格內容為空時,預設傳回當天的星期數。但不建議直接使用公式 WEEKDAY(),可能存在風險。

26. WEEK

1)函式介紹

WEEK(serial_num):傳回一個代表一年中的第幾週的數字。

Serial_num:輸入日期。

2)函式邏輯

年內第一週開始於第一個星期日所對應的日期,此外週的範圍為星期日到星期六。

FineReport 將日期儲存為系列數,一個系列數代表一個與之匹配的日期,以方便使用者對日期進行數值式計算。

在 1900 年日期系統中,FineReport 將 1900/1/1 儲存為系列數2,將 1900/1/2 儲存為系列數 3,……依此類推。如 1998/1/1 存為系列數 35796。

3)範例:

WEEK("2005/1/1") 等於 52(本年第一個星期日前的日期,都算作上一年最後一週的日期)

WEEK("2005/1/6") 等於 1(本年第一個星期日後的日期,從本年開始算起)

WEEK(35796) 等於 52(系列數對應到具體日期,然後轉化為第幾週)

4)參數修改邏輯

WEEK(serial_num,"F1"):採用 Excel 的邏輯,把年內第一個星期日前的日期算作第一週

WEEK(serial_num,"F7") 或 WEEK(serial_num):採用 FineReport 預設邏輯,年內第一個星期日前的日期算作上一年最後一週的日期,本年第一週開始於第一個星期日

例如:

WEEK("2019/1/5","F1") 等於 1

WEEK("2019/1/5","F7") 等於 52

WEEK("2019/1/6","F1")  等於 2

WEEK("2019/1/6","F7")  等於 1

27. WEEKDATE

WEEKDATE(year,month,weekOfMonth,dayOfWeek):傳回指定年月的指定週的週幾的具體日期。

1)預設週開始於星期日時,此時系統中週的範圍為星期日到星期六。

範例:

WEEKDATE(2009,10,2,1)傳回的是 2009 年的 10 月的第二個週的第一天即星期天的日期,傳回的是 2009-10-04;

最後一個參數 dayOfWeek為-1 時,表示這個週的最後一天。

範例:

WEEKDATE(2009,12,1,-1)傳回的是 2009 年的 12 月的第一個週的最後一天即星期六的日期,傳回的是 2009-12-05。

2)當設定 週開始於星期一 時,此時系統中週的範圍為星期一到星期日。

28. YEAR

YEAR(serial_number):傳回日期中的年。Year是介於1900和9999之間的一個數。

Serial_number:含有所求的年的日期,參數為空時預設為當天日期。

注: FineReport 將日期儲存為系列數,一個系列數代表一個與之匹配的日期,以方便使用者對日期進行數值式計算。

在 1900 年日期系統中,FineReport 試算表將 1900 年 1 月 1 日儲存為系列數 2,將 1900 年 1 月  2日儲存為系列數 3,將 1900 年 1 月 3 日儲存為系列數 4……依此類推。

如:在 1900 年日期系統,1998 年 1 月 1 日存為系列數 35796。

範例:

YEAR("2000/1/1")等於 2000。

YEAR("2006/05/05")等於 2006。

YEAR("1997/04/20")等於 1997。

YEAR(35796)等於 1998。

29. YEARDELTA

YEARDELTA(date, delta):傳回指定日期後delta年的日期。

範例:

YEARDELTA("2008-10-10",10)等於 2018-10-10。

30. LUNAR

LUNAR(year,day,month):傳回當前日期對應的農曆時間。year,month,day:分別對應年月日。

範例:

如果需要查詢 2011 年 7 月 21 日對應的農曆時間,則:

LUNAR(2011,7,21)結果將顯示為:辛卯年六月廿一。

LUNAR(2001,7,21) 結果顯示:辛巳年六月初一 。

注:本公式支援的時間段為 1900-2049 年。

31. ENDOFMONTH-日期所在月份之前或之後月份的最後一天的日期值

1)概述

文法ENDOFMONTH(date,number)回指定日期所在月份之前或之後月份的最後一天的日期值
參數1date指定日期,可預設;預設時預設為本月;
參數2number

指定月份前/後月份的數量,整數,可預設;

預設或者為0時,預設為date參數當月;

正整數時,為date之後的月份;

負整數時為date之前的月份;

2)注意事項

不支援第一個參數預設時第二個參數不預設。

3)範例

ENDOFMONTH("2021-12-22")等於2021-12-31

ENDOFMONTH("2021-12-22",12)等於2022-12-31

ENDOFMONTH("2021-12-22",-12)等於2020-12-31

ENDOFMONTH("2021-12-22",36)等於2024-12-31

32. ISWORKDAY-判斷日期是工作日還是週末

1)概述

文法ISWORKDAY(date)判斷某日期是工作日還是週末;工作日傳回true,非工作日傳回false;
參數1date具體的日期值,可以是日期型、可轉換為日期的字元類型;可預設,預設時預設為當前日期

2)注意事項

暫時僅支援週末和工作日判斷,暫時不支援法定節假日。

3)範例

ISWORKDAY("2021-12-30")等於true

ISWORKDAY("2021-01-02")等於false

附件列表


主題: 報表專題
已經是第一篇
已經是最後一篇
  • 有幫助
  • 沒幫助
  • 只是瀏覽
  • 圖片不清晰
  • 用語看不懂
  • 功能說明看不懂
  • 操作說明太簡單
  • 內容有錯誤
中文(繁體)

滑鼠選中內容,快速回饋問題

滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

不再提示

10s後關閉

獲取幫助
線上支援
獲取專業技術支援,快速幫助您解決問題
工作日9:00-12:00,13:30-17:30在线
頁面反饋
針對當前網頁的建議、問題反饋
售前咨詢
業務咨詢
電話:0933-790886或 0989-092892
郵箱:taiwan@fanruan.com
頁面反饋
*問題分類
不能為空
問題描述
0/1000
不能為空

反馈已提交

网络繁忙