diff options
| author | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-07-27 12:13:07 +0200 |
|---|---|---|
| committer | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-07-27 12:13:07 +0200 |
| commit | 4c76a397cc1395b207e106580897fa64ef039cef (patch) | |
| tree | 9756473292dcd60a5d18e6935563e694afbfde6a /internal/calendar/computus.go | |
| parent | b4982d22be0c79949046c9d957354209996acb2e (diff) | |
| download | lectio-4c76a397cc1395b207e106580897fa64ef039cef.tar.gz lectio-4c76a397cc1395b207e106580897fa64ef039cef.zip | |
feat(calendar): core types + Gregorian Computus
Diffstat (limited to 'internal/calendar/computus.go')
| -rw-r--r-- | internal/calendar/computus.go | 23 |
1 files changed, 23 insertions, 0 deletions
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) +} |
