雖然這個月有經過 Notion Formula 2.0 的版更,有些函數的寫法不一樣,但如果對於基礎的函數特性沒有概念的朋友,可以先參考這篇 Notion日期相關公式 ,
若已經了解了不同的資料屬性概念,也知道一些基礎的應用,那今天來記錄一下「計算工作天數」。
首先,我們需要先理解什麼是「工作天(weekday)」,簡單說就是相對於周末假日就是工作天,一般而言一周的工作天就是周一到周五共五天,先不進一步去計算特殊節假日,畢竟因為每個國家的國定假日都不太一樣,所以我們就只做「一周五天」的計算方式。
那如果要做排除特定假日的天數計算,我的小小建議是做一個特定日期的小集合,未來要新增或刪除日期會比較方便,然後用條件式派除這個小集合就可以啦~~但我有點懶得寫,就當作是個小挑戰自己試試看吧!
首先先做一個日期欄位,計算這個日期欄位會經過的天數,計算天數最基本會用到的函數是dateBetween
、dateEnd
、dateStart
。
dateBetween(prop("日期").dateEnd(), prop("日期").dateStart(), "days") + 1
計算日期範圍內有的完整周數,並且乘以二作為周六跟周日兩天。
(dateBetween(prop("日期").dateEnd(), prop("日期").dateStart(), "weeks") * 2
判斷是否有跨周末:day()
是判斷日期所在周幾,先判斷最大數max()
,再判斷小數min()
,若有跨周末會增加兩天,若無跨周末就為零。
min(max(prop("日期").dateStart().day() + dateBetween(prop("日期").dateEnd(), prop("日期").dateStart(), "days") % 7 - 5, 0), 2)
dateBetween(prop("日期").dateEnd(), prop("日期").dateStart(), "days") + 1 - (dateBetween(prop("日期").dateEnd(), prop("日期").dateStart(), "weeks") * 2 + min(max(prop("日期").dateStart().day() + dateBetween(prop("日期").dateEnd(), prop("日期").dateStart(), "days") % 7 - 5, 0), 2))
公式模板 👉 TEST_工作日公式拆解。
我想到最直接的應用就是一個大專案裡面有很多任務的設置,在很多有 SOP 化的規定下,每個小任務都會有自己的工作時間區間,那我們只要先將這些天數資料設置好,之後專案的日期時間,後面可以自動推算每個任務要完成的時間是什麼時候。
/*原工作日期*/
dateAdd(prop("日期"), prop("預計工作天數"), "days")
/*計算完整周數*/
dateBetween(prop("原工作日期"), prop("日期"), "weeks") * 2 + min(max(prop("日期").day() + dateBetween(prop("原工作日期"), prop("日期"), "days") % 7 - 5, 0), 2)
/*完整天數*/
dateAdd(prop("原工作日期"), prop("天數"), "days")
上面拆解成不同的欄位是方便大家容易閱讀,下方是只要設置必要的欄位就可以運作的公式,以及需要設置的欄位。
欄位:日期、預計工作天數
dateAdd(dateAdd(prop("日期"), prop("預計工作天數"), "days"), dateBetween(dateAdd(prop("日期"), prop("預計工作天數"), "days"), prop("日期"), "weeks") * 2 + min(max(prop("日期").day() + dateBetween(dateAdd(prop("日期"), prop("預計工作天數"), "days"), prop("日期"), "days") % 7 - 5, 0), 2), "days")
這邊我寫得很開心,但實際上可能你不需要這麼麻煩,之前Notion有更新一個功能(有點久之前了😋)叫做「Dependencies」,開啟這個功能,把所有一連串的任務設置關聯,裡面有一個小項目是「Avoid weekends」就可以避開周末日期啦~~
兩種方式的細節操作有點不同,「Dependencies」這個功能主要是依據上一個關聯任務的時間調整的,上面提供的公式主要是根據一開始設置的任務時間,直接展延之後的工作日期安排。
若我需要使用這樣的公式模板,初步想,應該會是兩個資料庫,分別是「專案」與「任務」,因為兩個資料庫有關聯,因此可以使用 Rollup 或是公式去串專案開始日期,而任務的「日期」欄位,就是專案開始日期。最後,我會使用 Calendar View,裡面的「Show calendar by」選擇公式的日期即可。
當然,也建議可以多增加一個「自定義日期」,然後判斷若該值為空就顯示原本公式的結果,若該值有數值,則顯示指定的日期。
如果有哪些部分說明的不對,都歡迎各方大神們的指教,Notion 很好玩,類程式碼可能也很有趣,讓我們突發奇想、多多練習與交流吧~