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