Notion Formula 2.0 § 日期公式常用篇

更新於 2024/11/24閱讀時間約 14 分鐘

前言

之前我寫過一篇〈Notion 日期相關公式〉,隨著公式函數進入 2.0 時代,一些函數有了新增或調整,使得公式編輯更加精簡。

回想起我學習 SQL 時,最不喜歡的就是處理與「時間」相關的程式碼,因為日期格式繁多,處理起來相當麻煩。但很多資料的調用都與日期、時間有關,因此練習與時間相關的函數是非常重要。

下方圖片篩選出與日期時間相關的函數,詳細的函數列表可以參考〈Notion 函數指南〉。

raw-image

在編寫公式時,請注意每種不同的函數資料屬性,下面列出與日期相關,但輸出格式不是日期時間的函數:

  • 「文字」屬性:formatDate(date, text)
  • 「數字」屬性:dateBetween()timestamp(date)minute(date)hour(date)day(date)date(date)month(date)year(date)

昨天、今天、明天

💡 以下的公式顯示以 2024/09/08 19:30 為例

/* 昨天 */
dateAdd(now(), -1, "days")
dateSubtract(now(), 1, "days")

/* 今天 */
now()/* 顯示 September 8, 2024 7:30 PM */
today() /* 顯示 September 8, 2024 */

/* 明天 */
dateAdd(now(), 1, "days")

活用formatDate創造各種呈現方式

時間 Time

/* 顯示 7:30 PM */
formatDate(prop("日期時間"), "h:mm A")
formatDate(prop("日期時間"), "LT")

/* 顯示 7:30 pm */
formatDate(prop("日期時間"), "h:mm a")

/* 顯示 19:30 */
formatDate(prop("日期時間"), "H:mm")

/* 顯示 19 */
formatDate(prop("日期時間"), "k")

周幾 Weekday

/* 顯示數字,如:0 */
formatDate(prop("日期時間"), "d")

/* 顯示兩個英文字,如:Su */
formatDate(prop("日期時間"), "dd")

/* 顯示三個英文字,如:Sun */
formatDate(prop("日期時間"), "ddd")

/* 顯示全部英文字,如:Sunday */
formatDate(prop("日期時間"), "dddd")

日期 Date

/* 顯示 8 */
formatDate(prop("日期時間"), "D")

/* 顯示 08 */
formatDate(prop("日期時間"), "DD")

/* 該日期在今年的第幾天,如:2024/09/08,顯示 252 */
formatDate(prop("日期時間"), "DDD")

第幾周 Week

/* 從周日起算,如:2024/09/08,顯示 37 */
formatDate(prop("日期時間"), "w")

/* 從周一起算,如:2024/09/08,顯示 36 */
formatDate(prop("日期時間"), "W")

月份 Month

/* 顯示 9 */
formatDate(prop("日期時間"), "M")

/* 顯示 09 */
formatDate(prop("日期時間"), "MM")

/* 顯示 Sep */
formatDate(prop("日期時間"), "MMM")

/* 顯示 September */
formatDate(prop("日期時間"), "MMMM")

季度 Quarter

/* 顯示 3 */
formatDate(prop("日期時間"), "Q")

/* 顯示 03 */
formatDate(prop("日期時間"), "QQ")

年分 Year

/* 顯顯示 2024 */
formatDate(prop("日期時間"), "Y")
formatDate(prop("日期時間"), "YYYY")

/* 顯示 24 */
formatDate(prop("日期時間"), "YY")

時區 Timezone

/* 顯示該時區,如:GMT+8 */
formatDate(prop("日期時間"), "z")

/* 顯示該時區,如:+08:00 */
formatDate(prop("日期時間"), "Z")

/* 顯示該時區,如:+0800 */
formatDate(prop("日期時間"), "ZZ")

各種不同的日期顯示格式

/* 顯示 9/8/2024 */
formatDate(prop("日期時間"), "l")

/* 顯示 Sep 8, 2024 */
formatDate(prop("日期時間"), "ll")

/* 顯示 Sep 8, 2024 7:30 PM */
formatDate(prop("日期時間"), "lll")

/* 顯示 Sun, Sep 8, 2024 7:30 PM */
formatDate(prop("日期時間"), "llll")

/* 顯示 09/08/2024 */
formatDate(prop("日期時間"), "L")

/* 顯示 September 8, 2024 */
formatDate(prop("日期時間"), "LL")

/* 顯示 September 8, 2024 7:30 PM */
formatDate(prop("日期時間"), "LLL")

/* 顯示 Sunday, September 8, 2024 7:30 PM */
formatDate(prop("日期時間"), "LLLL")

關於「月份」的其他運算

該日期所在月份的第一天,如9月8日該月的第一天是9月1日

dateSubtract(prop("日期時間"), date(prop("日期時間")) - 1, "days")

該日期所在月份的最後一天,如9月8日該月的最後一天是9月30日

lets(
本月第一天, dateSubtract(prop("日期時間"), date(prop("日期時間")) - 1, "days"),
次月第一天, dateAdd(本月第一天, 1, "months"),
本月最後一天, dateSubtract(次月第一天, 1, "days"),
本月最後一天
)

日期所在月份總天數

lets(
本月第一天, dateSubtract(prop("日期時間"), date(prop("日期時間")) - 1, "days"),
次月第一天, dateAdd(本月第一天, 1, "months"),
本月最後一天, dateSubtract(次月第一天, 1, "days"),
本月總天數, date(本月最後一天),
本月總天數
)

該日期所在該月份的哪一周 (周一~週日)

lets(
日期, date(prop("日期時間")),
本月第一天, dateSubtract(prop("日期時間"), 日期 - 1, "days"),
星期幾, day(本月第一天),
第幾周, ceil((日期 + 星期幾 - 1) / 7),
第幾周
)

日期所在的月份總周數

lets(
日期, date(prop("日期時間")),
本月第一天, dateSubtract(prop("日期時間"), 日期 - 1, "days"),
次月第一天, dateAdd(本月第一天, 1, "months"),
本月最後一天, dateSubtract(次月第一天, 1, "days"),
ceil((date(本月最後一天) + day(本月第一天)) / 7)
)

時間區間的運算

時間區間包含幾小時、幾分鐘。

lets(
開始時間, dateStart(prop("日期時間")),
結束時間, dateEnd(prop("日期時間")),
小時, dateBetween(結束時間, 開始時間, "hours"),
分鐘, dateBetween(結束時間, 開始時間, "minutes") % 60,
小時 + " hr " + 分鐘 + " min"
)

時間區間包含幾天、幾小時、幾分鐘。

lets(
開始時間, dateStart(prop("日期時間")),
結束時間, dateEnd(prop("日期時間")),
天數, dateBetween(結束時間, 開始時間, "days"),
小時, dateBetween(結束時間, 開始時間, "hours"),
分鐘, dateBetween(結束時間, 開始時間, "minutes") % 60,
天數 + " dy " + 小時 + " hr " + 分鐘 + " min"
)

判斷日子

在處理 To Do List、GTD(Getting Things Done)或進行回顧(Review)時,經常需要自動化顯示特定時間段的內容。雖然 Notion 的篩選器可以達到部分效果,但如果能通過公式編寫,會有更大的靈活性與彈性。

/* 是否為"昨天" */
formatDate(prop("日期時間"), "L") == formatDate(dateSubtract(now(), 1, "days"), "L")

/* 是否為"今天" */
formatDate(prop("日期時間"), "L") == formatDate(today(), "L")

/* 是否為"明天" */
formatDate(prop("日期時間"), "L") == formatDate(dateAdd(now(), 1, "days"), "L")

/* 是否為"本周" (W 是周一~周日,w 是週日~周六)
多判斷 Y,是為了避免隔一年還會出現前一年的資料 */
formatDate(prop("日期時間"), "WY") == formatDate(now(), "WY")

/* 是否為"本月" */
formatDate(prop("日期時間"), "MY") == formatDate(now(), "MY")

/* 判斷是否為"今年" */
formatDate(prop("日期時間"), "YYYY") == formatDate(now(), "YYYY")

/* 判斷是否為"星期幾" */
formatDate(prop("日期時間"), "dddY") == formatDate(now(), "dddY")

/* 判斷現在的日期時間是否是在指定日期時間中 */
/* 法一:運用 formatDate() 格式化顯示方式 */
and(formatDate(now(), "L") >= formatDate(dateStart(prop("日期時間")), "L"), formatDate(now(), "L") <= formatDate(dateEnd(prop("日期時間")), "L"))

/* 法二:對日期直接運算,再判斷 */
and(now() >= dateStart(prop("日期時間")), now() <= dateAdd(dateEnd(prop("日期時間")), 1, "days"))

結語

我們回顧了常用的日期函數與基礎公式,並結合新函數進行編輯,另外,特別強調了「月份」相關的運算,主要因為下方有一道練習題,希望大家可以藉此體驗let()函數的靈活性。

練習題

raw-image


結合之前文章〈Notion Formula 2.0 § Progress Bar 進度條〉的內容,讓我們來練習製作「自動倒數進度條」。




簡單需求分析如下:

  1. 當天日期 now(),相對於年、月、週、日的倒數進度條。(如 2024.10.15 是 2024 年的第 288 天,約佔 79%)。
  2. 設計如圖中的進度條 + 時間區間樣式。

此練習題會在之後的文章公布我的答案,歡迎各位同好們將自己思路或編寫的公式與大家分享優❤️~

參考資料


avatar-img
134會員
85內容數
小小的細縫裡,夢想的小苗也會萌芽。 我想在餘生中,體會生命的感動和奧秘。 透過仔細觀察,將發現世界不同的美好。 歡迎你來到 ~ ♡ Chloe 的小世界 ♡
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Chloe小窩 的其他內容
透過 Formula 2.0 用 lets() 函數,編寫進度條的公式。
Notion Formula 2.0 基礎學習範例,讓你快速上手新的功能函數。
Notion Formula 2.0 基礎學習範例,讓你快速上手新的功能函數。
分享 Notion Site 的功能與使用經驗,探討個人網站的設計考量,特別強調瞭如何優化頁面以改善用戶體驗,並提供模板資源供讀者參考,適合希望透過 Notion 創建個人網站的使用者。
回顧 2024 年至今 Notion 的重要更新,包括日曆整合、資料庫圖表視圖、其他功能和版面調整等。分享自己使用經驗和功能的實用性,幫助你更好地利用 Notion 的工具,提高工作效率。
透過 Formula 2.0 用 lets() 函數,編寫進度條的公式。
Notion Formula 2.0 基礎學習範例,讓你快速上手新的功能函數。
Notion Formula 2.0 基礎學習範例,讓你快速上手新的功能函數。
分享 Notion Site 的功能與使用經驗,探討個人網站的設計考量,特別強調瞭如何優化頁面以改善用戶體驗,並提供模板資源供讀者參考,適合希望透過 Notion 創建個人網站的使用者。
回顧 2024 年至今 Notion 的重要更新,包括日曆整合、資料庫圖表視圖、其他功能和版面調整等。分享自己使用經驗和功能的實用性,幫助你更好地利用 Notion 的工具,提高工作效率。
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
只需要一個資料庫就可以做到各種不同的用途顯示 像紙本的五年手帳一樣,可以自動回顧「過去的今天」的日記模板要如何設定? 函數設定的思路與教學都在這邊了! 免費日記模板下載
Thumbnail
在日常工作中,我們經常需要計算兩個日期之間的天數。無論是計算專案進行的天數、員工的工作天數,還是活動的剩餘天數,這些操作在EXCEL中都能輕鬆實現。 其實日期要計算天數超級簡單 日期天數=結束日期-開始日期+1 為什麼要+1呢? 可以讀一下這篇⬇️ 🔗EXCEL小知識 | 計算日期
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
只需要一個資料庫就可以做到各種不同的用途顯示 像紙本的五年手帳一樣,可以自動回顧「過去的今天」的日記模板要如何設定? 函數設定的思路與教學都在這邊了! 免費日記模板下載
Thumbnail
在日常工作中,我們經常需要計算兩個日期之間的天數。無論是計算專案進行的天數、員工的工作天數,還是活動的剩餘天數,這些操作在EXCEL中都能輕鬆實現。 其實日期要計算天數超級簡單 日期天數=結束日期-開始日期+1 為什麼要+1呢? 可以讀一下這篇⬇️ 🔗EXCEL小知識 | 計算日期