Easter rules

EASTER(...) is a rule expression you can use in a Calendite recurrence rule to schedule an event on Easter Sunday or on any of the days that move with it — Good Friday, Easter Monday, Ash Wednesday, Whit Sunday and so on. It is worked out, not looked up: no feed, no data source, and it works offline. See the rule reference for the surrounding syntax.

Format:

EASTER
EASTER({day})
EASTER({reckoning})
EASTER({day}, {reckoning})

The two arguments can be given in either order, and each is optional.

Supported day values

Each is an offset in days from Easter Sunday:

CleanMonday        -48
ShroveTuesday      -47
AshWednesday       -46
MotheringSunday    -21
PalmSunday          -7
MaundyThursday      -3
GoodFriday          -2
HolySaturday        -1
Sunday               0   (the default)
Monday              +1
Ascension          +39
Pentecost          +49
WhitSunday         +49   (same day as Pentecost)
WhitMonday         +50
TrinitySunday      +56
CorpusChristi      +60

Names are spelled exactly as above, the same way a category member is (BankHolidays(GoodFriday)). EASTER(goodfriday) and EASTER(Tuesday) are rejected.

Examples:

EASTER
EASTER(GoodFriday)
EASTER(Monday)
EASTER(AshWednesday)
EASTER(Pentecost)

Supported reckoning values

Western     (the default, and what the UK uses)
Orthodox

Western is the Gregorian calculation. Orthodox is the Julian calculation, shown on the ordinary calendar. Any day name works with either reckoning, since a day is only an offset, though AshWednesday, ShroveTuesday, MotheringSunday and CorpusChristi are Western observances and CleanMonday an Orthodox one.

Examples:

EASTER(Orthodox)
EASTER(Sunday, Orthodox)
EASTER(GoodFriday, Orthodox)
EASTER(Orthodox, GoodFriday)

Why it is in capitals

EASTER is spelled like MOON and WD because the engine computes it. PascalCase Easter is a category: a named set of dates you supply, which resolves to nothing unless you have given it data. The two never collide.

Using it with other rules

EASTER(...) produces one date a year, so it combines with everything else:

!EASTER(GoodFriday)                       exclude Good Friday
WD, !EASTER(GoodFriday), !EASTER(Monday)  weekdays, minus the Easter break
WD~<EASTER(GoodFriday)                    the last working day before the break
Day__OF__WEEK(EASTER)                     the week ending on Easter Sunday, Monday to Sunday

For the England & Wales bank holidays specifically, EASTER(GoodFriday) and BankHolidays(GoodFriday) give the same date; the difference is that the first needs no feed.

Examples

EASTER

Easter Sunday: 2025-04-20, 2026-04-05, 2027-03-28, …

EASTER(GoodFriday)

Good Friday: 2025-04-18, 2026-04-03, 2027-03-26, …

EASTER(Monday)

Easter Monday: 2026-04-06.

EASTER(AshWednesday)

Ash Wednesday, the first day of Lent: 2026-02-18.

EASTER(MotheringSunday)

Mothering Sunday: 2026-03-15.

EASTER(Orthodox)

Orthodox Easter Sunday: 2026-04-12.