前言
寫到這篇時,有點小疲累🤣,但我還是會盡力將公式逐步拆解,並用中文註解,讓理解過程更直觀。
在開始拆解公式之前,想先分享一下我在學習公式編寫時的心路歷程,還有如何加入個人需求來增強實用性。接著會帶大家一起編寫這個「迷你月曆」,不過只會說明關鍵步驟,若想獲得完整的工具公式,可以參考這裡的〈Notion 模板 § 小工具_迷你月曆〉。編寫公式前的準備
在動手編寫公式前,先要明確理解預期結果,進行基本的邏輯推演和需求分析。若無法直接從公式看出結果,可將公式拆分並逐段放入欄位中觀察輸出,尤其是數據型態的呈現。過程中透過不斷的試錯來調整寫法,再根據個人需求重組步驟(預期結果 → 分析 → 分段拼湊),最終便能設計出符合需求的公式。
分析需求

這次我們將利用資料庫製作小月曆。在編寫公式之前,先分析一下迷你月曆的呈現方式:
- 頂部顯示星期標題,需以粗體字呈現,且「Week」的「W」是以橘色顯示。
- 第一欄顯示周數,一年有 52 至 53 周,第 53 周需以隔年的資料顯示為 01。
- 如果月曆中出現「今天」的日期,該日期背景要呈現橘色,且對應周的數字也應為橘色。
手動設置迷你月曆
設置標題欄,並更改樣式
利用 style()
方法將周數欄的「W」設置成橙色粗體,並讓星期的縮寫也保持粗體顯示。
lets(
欄位, ["W".style("b", "orange"), "M".style("b"), "T".style("b"), "W".style("b"), "T".style("b"), "F".style("b"), "S".style("b"), "S".style("b")]
.........
)
計算月份和周數
取得當前月份 (月份
) 和周數 (現在在哪周
) 以及該月份的起始與結束周數(月初所在周
、月底所在周
)。
- 使用
dateStart()
和dateEnd()
確認每月的首尾並格式化周數。 - 利用
now().formatDate("W")
取得今天所在周數。
lets(
.........
月份, prop("日期").dateStart().month(),
現在在哪周, now().formatDate("W").toNumber(),
月初所在周, dateStart(prop("日期")).formatDate("W").toNumber(),
月底所在周, dateEnd(prop("日期")).formatDate("W").toNumber()
.........
)
計算本周周一的日期
確定本周的第一天的日期(周一的日期),作為接下來週計算的基準。
lets(
.........
本周周一日期, prop("日期").dateStart().dateSubtract(prop("日期").dateStart().day() - 1, "days")
.........
)
計算「月份跨越的周數」與「月份在哪幾周」
計算當前月份跨越了幾周,並確定這些周數是哪幾周。
lets(
.........
月份跨幾周, if(月底所在周 == 1 and 月份 == 12, 53, 月底所在周)
- if(月初所在周 <= 53 and 月初所在周 > 51 and 月份 == 1, 0, 月初所在周) + 1,
月份在哪幾周, "x".repeat(月份跨幾周).split("").map(dateStart(prop("日期"))
.dateAdd(index * 7, "days").formatDate("W").toNumber())
.........
)
「每周」的日期顯示
- 設置一周內的七天對應日期,並調整樣式。
- 本周日期:每周一日期,加上
index * 7
計算得出每周的開始日。 星期.map
:針對一周中的每一天進行處理,設定樣式。- 若
日期.month()
不等於目標月份則顯示空白,否則顯示日期並加上.style()
樣式。 - 當天日期的背景為橘色。
- 當天對應的所在周的周數顯示為橘色數字。
- 若
lets(
...........
周, 月份在哪幾周.map(
[ /* 今天所在周,特別顏色顯示 */
(if(current < 10, "0", "") + current).style(ifs(current == 現在在哪周, "orange",current < 現在在哪周, "gray","")),
/* 一周中有哪幾天 */
lets(
本周日期, 本周周一日期.dateAdd(index * 7, "days"),
星期, [1,2,3,4,5,6,7],
星期.map(
let(日期, 本周日期.dateAdd(index, "days"),
if(
日期.month() != 月份, " ",
日期.formatDate("DD").style(ifs(日期 == today(), "orange_background", 日期 < today(), "gray","")
)
)
)
)
).flat()
]
),
............
)
組合欄位和周顯示
lets(
...........
欄位.join(" ")
+ "\n"
+ 周.map(current.first() + " " + current.last().join(" ")).join("\n")
)
這種設置適合「月回顧」等應用場景,不僅能顯示當月目標與待辦事項,也能回顧上月底對本月的期待。
若你不需要月回顧或覺得手動設置麻煩,可以考慮購買 👉 「小工具_萬年曆」,自動顯示當月月曆,省去手動設置的步驟。只需將模板複製到 Notion 中,再放置到需要的位置即可。
迷你月曆的操作流程
- 需要在
日期欄位
中輸入月份區間,Name欄位
可輸入也可空白。 - 切換到
Gallery View
,預設顯示本月的月曆。 - 將月曆放置在您想要呈現的筆記頁面位置即可。

注意事項
記得選用「Mono」字體,這樣排版才會整齊。
範例頁面
模板連結
參考資料
- Discord 群組