From d684bb41b17fcbe2943070c98a6ea670e9eb010e Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Tue, 26 Aug 2025 21:16:34 +0800 Subject: [PATCH] :art: New template functions `ISOYear` and `ISOMonth` https://github.com/siyuan-note/siyuan/issues/15679 --- kernel/filesys/template.go | 2 ++ kernel/util/time.go | 15 +++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/kernel/filesys/template.go b/kernel/filesys/template.go index 9acaa54fc..3184da077 100644 --- a/kernel/filesys/template.go +++ b/kernel/filesys/template.go @@ -44,6 +44,8 @@ func BuiltInTemplateFuncs() (ret template.FuncMap) { ret["WeekdayCN"] = util.WeekdayCN ret["WeekdayCN2"] = util.WeekdayCN2 ret["ISOWeek"] = util.ISOWeek + ret["ISOYear"] = util.ISOYear + ret["ISOMonth"] = util.ISOMonth ret["pow"] = pow ret["powf"] = powf ret["log"] = log diff --git a/kernel/util/time.go b/kernel/util/time.go index bd9fad5ea..5a49b88d6 100644 --- a/kernel/util/time.go +++ b/kernel/util/time.go @@ -62,6 +62,21 @@ func ISOWeek(date time.Time) int { return week } +// ISOYear returns the ISO 8601 year in which date occurs. +func ISOYear(date time.Time) int { + year, _ := date.ISOWeek() + return year +} + +// ISOMonth returns the month in which the first day of the ISO 8601 week of date occurs. +func ISOMonth(date time.Time) int { + year, week := date.ISOWeek() + // ISO 8601 week starts from Monday + isoWeekStart := time.Date(year, 0, (week-1)*7+ + 1-(int(time.Date(year, 0, (week-1)*7+1, 0, 0, 0, 0, time.Local).Weekday())+6)%7, 0, 0, 0, 0, time.Local) + return int(isoWeekStart.Month()) +} + func Millisecond2Time(t int64) time.Time { sec := t / 1000 msec := t % 1000