From 4c76a397cc1395b207e106580897fa64ef039cef Mon Sep 17 00:00:00 2001 From: Lukasz Kasprzak Date: Mon, 27 Jul 2026 12:13:07 +0200 Subject: feat(calendar): core types + Gregorian Computus --- internal/calendar/computus.go | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 internal/calendar/computus.go (limited to 'internal/calendar/computus.go') diff --git a/internal/calendar/computus.go b/internal/calendar/computus.go new file mode 100644 index 0000000..13410cb --- /dev/null +++ b/internal/calendar/computus.go @@ -0,0 +1,23 @@ +package calendar + +import "time" + +// Easter returns Gregorian Easter Sunday (UTC midnight) via the Anonymous +// Gregorian algorithm (Meeus/Jones/Butcher). +func Easter(year int) time.Time { + a := year % 19 + b := year / 100 + c := year % 100 + d := b / 4 + e := b % 4 + f := (b + 8) / 25 + g := (b - f + 1) / 3 + h := (19*a + b - d - g + 15) % 30 + i := c / 4 + k := c % 4 + l := (32 + 2*e + 2*i - h - k) % 7 + m := (a + 11*h + 22*l) / 451 + month := (h + l - 7*m + 114) / 31 + day := ((h + l - 7*m + 114) % 31) + 1 + return time.Date(year, time.Month(month), day, 0, 0, 0, 0, time.UTC) +} -- cgit v1.3