想顯示輸入日期為該月的第幾週
在kintone的應用程式中使用計算公式,計算輸入日期為該月的第幾週。
此處將介紹計算公式的設定範例。
準備
開啟應用程式的設定畫面的表單分頁,配置以下6個欄位。
- (1) 日期欄位
- (2) 計算欄位
- (3) 計算欄位
- (4) 單行文字方塊欄位
- (5) 計算欄位
- (6) 單行文字方塊欄位
各欄位的設定
開啟配置好的各欄位的設定畫面,設定欄位名稱、欄位代碼、計算公式。
關於欄位代碼
將各欄位設定如下,在(1)的欄位中輸入的日期為該月第幾週,將會在(6)的欄位中顯示。
(2)~(5)的欄位用於計算過程。
(1) 日期欄位
此欄位用來輸入想計算為該月第幾週的日期。
- 欄位名稱:日期
- 欄位代碼:日期
此欄位不設定計算公式。
(2) 計算欄位
此欄位只計算在(1)中輸入的日期的天數(進入該月後所經過的天數)。
-
欄位名稱:日的部分
-
欄位代碼:日的部分
-
計算公式:設定以下計算公式。
DATE_FORMAT(日期, "d", "Asia/Tokyo")
(3) 計算欄位
此欄位根據在(1)中輸入的日期,以UNIX時間的格式(數值)計算該月第一天。
-
欄位名稱:該月第一天
-
欄位代碼:該月第一天
-
計算公式:設定以下計算公式。
日期-((日的部分-1)*60*60*24)
(4) 單行文字方塊欄位
此欄位根據在(3)中計算出的該月第一天,計算該日是星期幾。
-
欄位名稱:該月第一天星期數
-
欄位代碼:該月第一天星期數
-
計算公式:勾選「自動計算」,並設定以下計算公式。
IF( ( ( (該月第一天 / 60 / 60 / 24) - 0) / 7 ) - ROUNDUP(( ( (該月第一天 / 60 / 60 / 24) - 0) / 7 ) , 0) = 0 , "週四", IF( ( ( (該月第一天 / 60 / 60 / 24) - 1) / 7 ) - ROUNDUP(( ( (該月第一天 / 60 / 60 / 24) - 1) / 7 ) , 0) = 0 , "週五", IF( ( ( (該月第一天 / 60 / 60 / 24) - 2) / 7 ) - ROUNDUP(( ( (該月第一天 / 60 / 60 / 24) - 2) / 7 ) , 0) = 0 , "週六", IF( ( ( (該月第一天 / 60 / 60 / 24) - 3) / 7 ) - ROUNDUP(( ( (該月第一天 / 60 / 60 / 24) - 3) / 7 ) , 0) = 0 , "週日", IF( ( ( (該月第一天 / 60 / 60 / 24) - 4) / 7 ) - ROUNDUP(( ( (該月第一天 / 60 / 60 / 24) - 4) / 7 ) , 0) = 0 , "週一", IF( ( ( (該月第一天 / 60 / 60 / 24) - 5) / 7 ) - ROUNDUP(( ( (該月第一天 / 60 / 60 / 24) - 5) / 7 ) , 0) = 0 , "週二", IF( ( ( (該月第一天 / 60 / 60 / 24) - 6) / 7 ) - ROUNDUP(( ( (該月第一天 / 60 / 60 / 24) - 6) / 7 ) , 0) = 0 , "週三","不適用" ) ) ) ) ) ) )
(5) 計算欄位
此欄位根據在(4)中計算出的該月第一天的星期數,計算在(2)中計算出的日期為該月第幾週。
-
欄位名稱:週數
-
欄位代碼:週數
-
計算公式:設定以下計算公式。此計算公式將一週的開始以週日為例。
IF(該月第一天星期數="週日", IF(日的部分<=7, 1, IF(ROUNDUP((日的部分-7)/7)-ROUNDDOWN((日的部分-7)/7)=0, ROUNDDOWN((日的部分-7)/7)+1, ROUNDDOWN((日的部分-7)/7)+2)), IF(該月第一天星期數="週一", IF(日的部分<=6, 1, IF(ROUNDUP((日的部分-6)/7)-ROUNDDOWN((日的部分-6)/7)=0, ROUNDDOWN((日的部分-6)/7)+1, ROUNDDOWN((日的部分-6)/7)+2)), IF(該月第一天星期數="週二", IF(日的部分<=5, 1, IF(ROUNDUP((日的部分-5)/7)-ROUNDDOWN((日的部分-5)/7)=0, ROUNDDOWN((日的部分-5)/7)+1, ROUNDDOWN((日的部分-5)/7)+2)), IF(該月第一天星期數="週三", IF(日的部分<=4, 1, IF(ROUNDUP((日的部分-4)/7)-ROUNDDOWN((日的部分-4)/7)=0, ROUNDDOWN((日的部分-4)/7)+1, ROUNDDOWN((日的部分-4)/7)+2)), IF(該月第一天星期數="週四", IF(日的部分<=3, 1, IF(ROUNDUP((日的部分-3)/7)-ROUNDDOWN((日的部分-3)/7)=0, ROUNDDOWN((日的部分-3)/7)+1, ROUNDDOWN((日的部分-3)/7)+2)), IF(該月第一天星期數="週五", IF(日的部分<=2, 1, IF(ROUNDUP((日的部分-2)/7)-ROUNDDOWN((日的部分-2)/7)=0, ROUNDDOWN((日的部分-2)/7)+1, ROUNDDOWN((日的部分-2)/7)+2)), IF(該月第一天星期數="週六", IF(日的部分<=1, 1, IF(ROUNDUP((日的部分-1)/7)-ROUNDDOWN((日的部分-1)/7)=0, ROUNDDOWN((日的部分-1)/7)+1, ROUNDDOWN((日的部分-1)/7)+2)), "不適用" ) ) ) ) ) ) )
若想將一週的開始設為週一,請將計算公式的「該月第一天星期數="週日"」變更為「該月第一天星期數="週一"」。此計算公式內的其他星期幾也請同樣變更為各往後挪移一天。
若想了解計算公式詳情,請參閱「(5)的計算公式的解說」。
(6) 單行文字方塊欄位
此欄位根據在(5)中計算出的週數,以「幾年幾月的第幾週」的格式顯示在(1)中輸入的日期為該月的第幾週。
-
欄位名稱:第幾週
-
欄位代碼:第幾週
-
計算公式:勾選「自動計算」,並設定以下計算公式。
DATE_FORMAT(日期, "YYYY年MM月的", "Asia/Tokyo")&"第"&週數&"週"
(5)的計算公式的解說
(5)欄位根據在(4)中計算出的該月第一天的星期數,計算在(2)中計算出的日期為該月第幾週。
由於此計算公式使用IF函數,根據條件不同,之後的流程會出現分支。
分支1:日期是否超過第一週的天數
第一週的天數根據該月第一天是星期幾決定。
(5)的計算公式中以週日為一週的開始為例。
- 例:一週的開始為週日時
- 該月第一天為「週一」時,第一週有6天。
- 該月第一天為「週二」時,第一週有5天。
以在(2)中計算出的日期是否超過此第一週的天數,來判斷日期是在第一週還是第二週以後。
- 日期未超過第一週的天數時
判斷日期為第一週。
在(5)的欄位中,顯示第一週的「1」。 - 日期超過第一週的天數時
判斷日期為第二週以後。
此時將繼續計算該日期在第二週以後的哪一週。
分支2:日期若在第二週以後,會是在哪一週
日期超過第一週的天數時,將會計算該日期在第二週以後的哪一週。
在(2)中計算出的日期減去第一週的天數,計算從第一週的最後一天起經過的天數。
將此天數除以一週天數「7」。
無餘數可整除時
商數加上第一週份的「1(週)」,計算出的數為該日期在的週。
在(5)的欄位中,顯示商數加上1的數。
例:該月第一天為「週一」,輸入日期為「13日」時
該月第一天為「週一」時,第一週有6天。
日期的「13」減去第一週天數「6(天)」,計算出從第一週的最後一天起經過的天數為「7(天)」。
以此「7(天)」除以「7(天/週)」,計算結果為「1(週)餘0(天)」。
商數的「1(週)」加上第一週份的「1(週)」,計算出該日期在第二週。
有餘數無法整除時
商數加上有剩餘天數的週份與第一週份的「2(週)」,計算出的數為該日期在的週。
在(5)的欄位中,顯示商數加上2的數。
例:該月第一天為「週一」,輸入日期為「15日」時
該月第一天為「週一」時,第一週有6天。
日期的「15」減去第一週天數「6(天)」,計算出從第一週的最後一天起經過的天數為「9(天)」。
以此「9(天)」除以「7(天/週)」,計算結果為「1(週)餘2(天)」。
商數的「1(週)」加上有剩餘天數的週份與第一週份的「2(週)」,計算出該日期在第三週。
參考:使用圖表功能的應用範例
若想依個別為「幾年幾月的幾週」匯總記錄,請在圖表設定的「分組項目」中,指定上述設定的(6)中計算為該月第幾週的欄位。
-
圖表設定範例
-
匯總結果的確認範例
此外,若有日期欄位,可使用圖表功能,依各年的第幾週匯總記錄。
請在圖表設定的「分組項目」中,將日期欄位指定為「以週為單位」。
例如,日期欄位的值為「2022年3月30日」時,由於是2022年的第13週,記錄會匯總為「2022 13」。
參考:應用程式範本
可透過以下連結下載應用程式範本,範本中包含此頁面介紹的欄位設定、能以「幾年幾月的第幾週」匯總的圖表設定。
應用程式範本:what_week_en.zip
點擊連結下載範本檔案(zip)後,請勿解壓縮,直接將檔案匯入kintone。